IOKELU
Nivel: Avanzado
💡 Optimiza tus consultas:
Puedes probar cualquier consulta optimizada en nuestra consola interactiva: Abrir consola SQL →

Optimización de consultas SQL: rendimiento profesional

Optimizar consultas SQL es esencial para bases de datos grandes. Aquí aprenderás técnicas avanzadas para acelerar consultas, reducir carga y mejorar eficiencia.

1. Uso correcto de índices


CREATE INDEX idx_usuarios_email
ON usuarios(email);

SELECT * FROM usuarios WHERE email = 'ana@example.com';
    

Los índices aceleran búsquedas, pero deben usarse en columnas con alta cardinalidad.

2. Optimización de JOIN


SELECT u.nombre, p.producto
FROM usuarios u
JOIN pedidos p ON u.id = p.usuario_id;
    

Asegúrate de que las columnas usadas en JOIN estén indexadas.

3. Filtros eficientes


SELECT * FROM productos
WHERE precio > 50 AND categoria = 'Electrónica';
    

Evita funciones sobre columnas en WHERE, ya que rompen índices.

4. Evitar subconsultas innecesarias


-- Ineficiente
SELECT nombre
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos);

-- Optimizado con CTE
WITH promedio AS (
    SELECT AVG(precio) AS avg_precio FROM productos
)
SELECT nombre
FROM productos, promedio
WHERE precio > promedio.avg_precio;
    

5. SELECT eficiente


-- Evita SELECT *
SELECT nombre, precio FROM productos;
    

6. ORDER BY y rendimiento


SELECT * FROM ventas ORDER BY fecha DESC;
    

ORDER BY puede ser costoso en tablas grandes sin índices adecuados.

7. Interpretar planes de ejecución


EXPLAIN SELECT * FROM productos WHERE precio > 50;
    

EXPLAIN muestra cómo la base de datos ejecuta la consulta y dónde optimizar.

8. Ejemplos prácticos


-- Optimización de JOIN
CREATE INDEX idx_pedidos_usuario ON pedidos(usuario_id);

-- Evitar funciones en WHERE
SELECT * FROM usuarios WHERE fecha_registro > '2024-01-01';

-- Reemplazar subconsultas por CTE
WITH totales AS (
    SELECT producto_id, SUM(cantidad) AS total
    FROM ventas
    GROUP BY producto_id
)
SELECT p.nombre, t.total
FROM productos p
JOIN totales t ON p.id = t.producto_id;
    

9. Ejercicios para practicar

10. Mini‑proyecto: Optimización completa de un sistema


CREATE INDEX idx_clientes_ciudad ON clientes(ciudad);

WITH totales AS (
    SELECT cliente_id, SUM(cantidad) AS total
    FROM ventas
    GROUP BY cliente_id
)
SELECT c.nombre, t.total
FROM clientes c
JOIN totales t ON c.id = t.cliente_id
ORDER BY t.total DESC;
    

11. Errores comunes

12. Preguntas frecuentes

¿Optimizar siempre acelera?

Depende del caso, pero siempre mejora la eficiencia.

¿EXPLAIN es obligatorio?

Sí, para entender el rendimiento real.


Siguiente guía

SQL Avanzado – EXPLAIN Plan →