...

SQL limpio, rápido y profesional: buenas prácticas esenciales

Si trabajas con bases de datos, tarde o temprano te enfrentarás a consultas lentas, tablas enormes y problemas de rendimiento difíciles de diagnosticar. La buena noticia: la mayoría de esos problemas no se deben a la base de datos, sino a cómo se escribe SQL.

En este artículo conocerás 12 buenas prácticas para optimizar consultas y escribir SQL profesional, usando ejemplos 100% compatibles con PostgreSQL, que puedes practicar directamente en db-fiddle.com.


1. Usa SELECT con columnas explícitas (evita SELECT *)

Cuando usas:

SELECT * FROM ventas;

La base devuelve todas las columnas, incluso las que no necesitas. Esto:

  • Aumenta el tráfico entre servidor y cliente
  • Impide usar índices cubiertos
  • Oculta si la tabla crece con nuevas columnas

En su lugar:

SELECT id_venta, fecha, total
FROM ventas;

2. Revisa tus JOIN: siempre especifica ON y evita combinaciones ambiguas

Consulta ineficiente:

SELECT *
FROM ventas, clientes
WHERE ventas.id_cliente = clientes.id_cliente;

Consulta correcta:

SELECT v.id_venta, c.nombre, v.total
FROM ventas AS v
JOIN clientes AS c ON v.id_cliente = c.id_cliente;

3. Usa índices con intención (y comprende B-Tree)

¿Qué es un índice B-Tree en PostgreSQL?

Es la estructura de índice por defecto en PostgreSQL.
Ventajas:

  • Se adapta bien a prácticamente cualquier tamaño de tabla
  • Permite búsquedas rápidas usando comparaciones (<, >, =, BETWEEN)
  • Optimiza ORDER BY y GROUP BY
  • Mantiene los datos «ordenados» lógicamente

Se recomienda un índice B-Tree cuando consultas por:

  • Igualdad (=)
  • Rango (BETWEEN, >, <)
  • Condiciones compuestas
  • Claves foráneas

📌 Ejemplo:

CREATE INDEX idx_ventas_id_cliente
ON ventas(id_cliente);

4. Evita funciones en columnas indexadas en WHERE

Ineficiente (rompe el índice):

SELECT *
FROM ventas
WHERE DATE(fecha) = '2025-01-01';

Optimizado:

SELECT *
FROM ventas
WHERE fecha >= '2025-01-01'
  AND fecha < '2025-01-02';

5. Usa EXPLAIN y EXPLAIN ANALYZE para entender tu consulta

EXPLAIN ANALYZE
SELECT *
FROM ventas
WHERE total > 500;

Esto te dice:

  • Si usó índice
  • Cuánto tiempo tardó
  • Si hubo “secuencial scan” (mala señal en tablas grandes)

6. Normaliza tus tablas (hasta donde tenga sentido)

La normalización:

  • Reduce duplicidad
  • Acelera actualizaciones
  • Mejora integridad

Ejemplo de mala práctica:

-- cliente y dirección duplicados en la tabla ventas

Versión normalizada:

SELECT v.id_venta, c.nombre, d.ciudad
FROM ventas v
JOIN clientes c ON v.id_cliente = c.id_cliente
JOIN direcciones d ON c.id_direccion = d.id_direccion;

7. Usa LIMIT en herramientas de análisis

Cuando exploras datos:

SELECT *
FROM ventas
LIMIT 50;

Esto descarga solo lo necesario.


8. Prefiere COUNT(*) sobre COUNT(columna)

En PostgreSQL, COUNT(*) es más rápido, porque no valida nulos.

Correcto:

SELECT COUNT(*) FROM ventas;

9. Filtra lo más pronto posible

Ineficiente:

SELECT nombre
FROM clientes
JOIN ventas ON ventas.id_cliente = clientes.id_cliente;

Optimizado:

SELECT nombre
FROM clientes
WHERE activo = TRUE
JOIN ventas ON ventas.id_cliente = clientes.id_cliente;

10. Usa CTE solo si realmente mejora la claridad

Antes:

WITH datos AS (
  SELECT * FROM ventas WHERE total > 500
)
SELECT COUNT(*) FROM datos;

Pero PostgreSQL puede optimizar mejor sin CTE:

SELECT COUNT(*)
FROM ventas
WHERE total > 500;

11. Maneja NULL correctamente

Evita:

WHERE columna <> 10

Es incapaz de evaluar NULL.
Usa:

WHERE columna IS NOT NULL
  AND columna <> 10;

12. Documenta tu SQL

Los SQL “rápidos pero oscuros” generan problemas futuros.

-- ventas mayores a $500 en el último trimestre
SELECT id_venta, fecha, total
FROM ventas
WHERE total > 500
  AND fecha >= '2025-10-01';

Conclusión

Estas 12 buenas prácticas son la base para escribir SQL más claro, rápido y profesional. PostgreSQL es muy potente, pero solo muestra su verdadero rendimiento cuando usamos consultas bien diseñadas.

Deja un comentario

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.