"No siempre se necesita magia para mejorar el rendimiento. A veces, alcanza con volver a lo básico."
🛠️ Técnica 1: Agregá filtros ANTES de hacer JOINs
Una práctica común es aplicar los filtros al final de la query, pero esto puede llevar a que la base de datos procese muchos más registros de los necesarios.
❌ Mal ejemplo: Filtro después del JOIN
SELECT u.nombre, o.total
FROM usuarios u
JOIN ordenes o ON u.id = o.usuario_id
WHERE u.estado = 'activo' AND o.fecha >= '2024-01-01';
Acá se hace el JOIN sobre toda la tabla de usuarios y ordenes antes de filtrar, lo cual puede generar un volumen de datos innecesario.
✅ Buen ejemplo: Filtros antes del JOIN (usando CTEs o subqueries)
WITH usuarios_filtrados AS (
SELECT id, nombre
FROM usuarios
WHERE estado = 'activo'
),
ordenes_filtradas AS (
SELECT usuario_id, total
FROM ordenes
WHERE fecha >= '2024-01-01'
)
SELECT u.nombre, o.total
FROM usuarios_filtrados u
JOIN ordenes_filtradas o ON u.id = o.usuario_id;
Esto reduce significativamente la cantidad de registros en el JOIN, lo que mejora el rendimiento y la claridad del plan de ejecución.
🛠️ Técnica 2: Cuidado con las funciones en el WHERE
Las funciones en columnas dentro del WHERE pueden hacer que el motor de base de datos no use índices, forzando un full table scan.
❌ Mal ejemplo: Función sobre la columna
SELECT *
FROM ventas
WHERE YEAR(fecha_venta) = 2025;
Esta consulta inutiliza cualquier índice sobre fecha_venta.
✅ Buen ejemplo: Reescribir la condición
SELECT *
FROM ventas
WHERE fecha_venta >= '2025-01-01' AND fecha_venta < '2026-01-01';
Con este cambio, se puede utilizar un índice sobre fecha_venta, logrando mejoras significativas en el rendimiento.
📊 Comparativa de impacto estimado
| Técnica | Dificultad de aplicar | Mejora esperada | Cuándo aplicarla |
|---|---|---|---|
| Filtros antes de JOIN | Muy baja | Alta | Siempre que trabajes con muchas relaciones |
Evitar funciones en WHERE |
Baja | Alta | En columnas con índices |
🧩 Conclusiones
Estas dos prácticas son básicas, pero muchas veces ignoradas:
- Filtrar antes de hacer JOINs evita que el motor trabaje de más.
- Evitar funciones en el WHERE permite aprovechar los índices.
Me gusta usarlas porque son fáciles de implementar y ofrecen mejoras reales. No requieren cambiar estructuras, ni usar trucos avanzados, ni dependencias externas.
Si estás revisando el rendimiento de tus queries, arrancá por acá. A veces, lo simple también es poderoso 💪
¿Querés más ejemplos así? Te leo en los comentarios 👇