O problema real
Sua aplicação está lenta. Você olha os logs e descobre que uma query está demorando 3 segundos. E agora?
1. EXPLAIN é seu melhor amigo
Antes de otimizar, entenda o que está acontecendo:
EXPLAIN ANALYZE SELECT * FROM orders
WHERE user_id = 123
AND created_at > '2024-01-01';Procure por:
2. Índices estratégicos
Índices errados são piores que nenhum índice:
-- Índice composto na ordem certa
CREATE INDEX idx_orders_user_date
ON orders(user_id, created_at);
-- A ordem importa! user_id primeiro se é o mais seletivo3. N+1 é o vilão silencioso
O problema mais comum em ORMs:
// Ruim: N+1 queries
const users = await User.findAll()
for (const user of users) {
const orders = await user.getOrders() // Query para cada user!
}
// Bom: Eager loading
const users = await User.findAll({
include: [Order]
})4. Connection pooling
Conexões são caras. Use pools:
const pool = new Pool({
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
})Conclusão
Performance de banco de dados é sobre fazer menos trabalho, não trabalho mais rápido. Meça, analise e otimize com dados.