Query lenta em Firebird? Antes de culpar o banco, verifique estes 5 pontos.
1. Use EXPLAIN PLAN
SET PLAN ON;
SELECT * FROM clientes WHERE nome = 'João';
O plano mostra se a query usa índice ou faz full table scan.
2. Crie índices nas colunas de filtro
-- Se a query filtra por data, crie índice
CREATE INDEX idx_pedidos_data ON pedidos(data_pedido);
3. Evite SELECT *
-- Lento: carrega todas as colunas
SELECT * FROM pedidos WHERE data_pedido >= CURRENT_DATE - 30
-- Rápido: apenas colunas necessárias
SELECT cliente_id, valor, data_pedido FROM pedidos WHERE data_pedido >= CURRENT_DATE - 30
4. Use FIRST para limitar resultados
-- Sem limite: pode retornar milhares de linhas
SELECT nome FROM clientes ORDER BY nome
-- Com limite: apenas o necessário
SELECT FIRST 50 nome FROM clientes ORDER BY nome
5. Evite subqueries correlacionadas
-- Lento: subquery executada para cada linha
SELECT nome FROM clientes c
WHERE (SELECT COUNT(*) FROM pedidos p WHERE p.cliente_id = c.id) > 5
-- Rápido: use JOIN + GROUP BY
SELECT c.nome
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.nome
HAVING COUNT(*) > 5
Precisa de ajuda para otimizar suas queries? Descreva o problema em português no Sqlify e receba uma query otimizada com dicas de performance.
Conclusão
Performance no Firebird depende de índices, queries bem escritas e uso correto de FIRST/SKIP. Sempre use EXPLAIN PLAN antes de otimizar.