ANALYZE y pg_statistic
Mantenga actualizadas las estadísticas del planificador con ANALYZE, inspeccione pg_statistic y utilice estadísticas ampliadas para columnas correlacionadas.
ANALYZE y pg_statistic es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Por qué ANALYZE?
El planificador de consultas necesita estimar el número de filas y las selectividades para elegir un buen plan. Estas estimaciones proceden de las estadísticas por columna que recopila ANALYZE.
Cuándo ejecutar ANALYZE
Autovacuum ejecuta ANALYZE automáticamente según los umbrales de cambio de filas. Después de cargas masivas o DELETE grandes, ejecútelo manualmente para evitar que los planes se degraden:
ANALYZE orders;
ANALYZE (VERBOSE) orders;Muestreo
ANALYZE toma muestras de unos cientos de filas por columna. Ajuste el objetivo de estadísticas si los valores predeterminados producen estimaciones incorrectas:
ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.pg_statistic
El catálogo del sistema donde se almacenan las estadísticas (use la vista pg_stats para facilitar la lectura):
SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';Qué observa el planificador
- n_distinct: cuántos valores distintos hay
- most_common_vals: los valores principales y sus frecuencias
- histogram_bounds: intervalos para las consultas por rango
- correlation: orden físico frente a orden lógico (afecta al coste de la exploración)
Estadísticas extendidas
Las estadísticas por columna no detectan las correlaciones entre columnas. CREATE STATISTICS las captura:
CREATE STATISTICS orders_country_status (dependencies)
ON country, status FROM orders;
ANALYZE orders;
-- Now the planner knows that country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').Tipos de estadísticas multivariantes
dependencies: dependencias funcionales (una columna predice otra)ndistinct: combinaciones de valores distintosmcv: valores combinados más frecuentes (PG 12+)
Estimaciones incorrectas → planes incorrectos
La razón más habitual de que una consulta sea lenta es que las estimaciones de filas sean incorrectas. El planificador elige Nested Loop porque espera 1 fila, pero en realidad hay 1.000.000.
EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.Forzar ANALYZE en las migraciones
Después de una carga masiva grande:
COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.Las estadísticas no se actualizan automáticamente cuando cambia la distribución de los datos
Si los datos de hoy son muy diferentes de los de ayer, las estadísticas pueden seguir obsoletas hasta que se active autoanalyze. Ejecute ANALYZE manualmente después de cambios en la distribución de los datos.
pg_class.reltuples
El planificador también utiliza un recuento estimado de filas procedente de pg_class. VACUUM/ANALYZE lo actualiza. Puede comprobarlo rápidamente:
SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';Resumen
ANALYZE proporciona datos al planificador.
- Ejecútelo después de cambios importantes en los datos
- Aumente el objetivo de STATISTICS para las columnas con una distribución sesgada
- Use CREATE STATISTICS para las correlaciones entre columnas
- Una gran diferencia entre la estimación y el valor real es lo primero que debe corregir
Comprobación rápida
EXPLAIN ANALYZE muestra rows=1 estimado, pero rows=500.000 real, en un WHERE sobre una sola columna. ¿Cuál es la primera solución?
Preguntas frecuentes
¿La lección «ANALYZE y pg_statistic» es gratis?
Sí — el texto completo de «ANALYZE y pg_statistic» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «ANALYZE y pg_statistic»?
Mantenga actualizadas las estadísticas del planificador con ANALYZE, inspeccione pg_statistic y utilice estadísticas ampliadas para columnas correlacionadas. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «ANALYZE y pg_statistic»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- MVCC y causas de la fragmentación
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE y pg_statistic
- Escaneos solo de índice y mapa de visibilidad