No CodeIgniter 3, você pode aplicar essas boas práticas ao trabalhar com o banco de dados Oracle usando a biblioteca query builder
ou db->query()
. Vou te mostrar como fazer isso.
1. Paginação para evitar sobrecarga de memória
No CodeIgniter 3, você pode usar limit()
e offset()
para buscar os registros em partes.
$limite = 100; // Quantidade de registros por página
$offset = $this->uri->segment(3, 0); // Pega o valor da URL (ex: /controller/método/100)
$this->db->limit($limite, $offset);
$query = $this->db->get('sua_tabela'); // Executa a consulta
$resultado = $query->result_array();
Isso evita carregar um grande volume de dados de uma vez.
2. Usar fetch()
ao invés de fetchAll()
O CodeIgniter já trabalha de forma otimizada, mas se precisar evitar carregar todos os registros na memória, use result()
ou result_array()
para iterar diretamente no loop:
$query = $this->db->query("SELECT * FROM sua_tabela");
foreach ($query->result() as $row) {
// Processa cada linha sem sobrecarregar a memória
}
Ou, para evitar objetos e trabalhar com arrays:
$query = $this->db->query("SELECT * FROM sua_tabela");
foreach ($query->result_array() as $row) {
// Processa cada linha em formato de array
}
3. Processar os dados em partes com array_chunk()
Se você já carregou um grande conjunto de dados, pode dividir os dados para processar em lotes menores:
$query = $this->db->get('sua_tabela');
$dados = $query->result_array();
$dadosDivididos = array_chunk($dados, 100); // Divide em blocos de 100 registros
foreach ($dadosDivididos as $chunk) {
foreach ($chunk as $item) {
// Processa cada item dentro do bloco
}
}
4. Otimizar consultas SQL e índices
Se sua consulta for complexa, você pode otimizar com índices adequados e usar EXPLAIN PLAN
no Oracle para analisar a performance.
Para consultas específicas no CodeIgniter:
$this->db->select('coluna1, coluna2'); // Pegue apenas as colunas necessárias
$this->db->where('status', 'ativo'); // Filtre os dados para evitar trazer registros desnecessários
$this->db->limit(100); // Limite de registros
$query = $this->db->get('sua_tabela');
5. Ajustes de memória e tempo de execução
Se o processamento for pesado, você pode aumentar os limites no PHP dentro do CodeIgniter:
ini_set('memory_limit', '512M'); // Aumenta a memória disponível
set_time_limit(0); // Evita que o script pare por tempo de execução
Caso esteja dentro de um controller:
public function processar_dados() {
ini_set('memory_limit', '512M');
set_time_limit(0);
// Código aqui...
}
6. Evitar loops infinitos e adicionar logs
Se seu código estiver travando, pode ser um loop infinito. Adicione logs para entender onde o problema ocorre:
foreach ($query->result_array() as $row) {
log_message('debug', 'Processando ID: ' . $row['id']);
}
Isso ajuda a depurar possíveis travamentos.
Conclusão
No CodeIgniter 3, as melhores práticas são:
✅ Usar limit()
e offset()
para buscar dados em partes.
✅ Usar result()
ou fetch()
para evitar carregar tudo na memória.
✅ Quebrar os dados com array_chunk()
se necessário.
✅ Otimizar consultas SQL pegando apenas os dados necessários.
✅ Ajustar memory_limit
e set_time_limit(0)
para grandes volumes de dados.
Se precisar de um exemplo mais específico para seu caso, me avise! 🚀