Si el planificador de consultas toma malas decisiones, se debe principalmente a una de estas dos cosas:
1. Las estadísticas son inexactos.
¿Ejecutas ANALYZE
? ¿suficiente? También popular en su forma combinada VACUUM ANALYZE
. Si el vacío automático está activado (que es el valor predeterminado en Postgres moderno), ANALYZE
se ejecuta automáticamente. Pero considere:
- ¿Se sigue recomendando VACUUM ANALYZE regular en 9.1?
Si tu mesa es grande y la distribución de datos es irregular , aumentando el default_statistics_target
puede ayudar. O más bien, simplemente establezca el objetivo de estadísticas para las columnas relevantes (aquellas en WHERE
o JOIN
cláusulas de sus consultas, básicamente):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
El objetivo se puede establecer en el rango de 0 a 10000;
Ejecute ANALYZE
nuevamente después de eso (en las tablas relevantes).
2. La configuración de costos para las estimaciones del planificador están desactivadas.
Lea el capítulo Constantes de costos del planificador en el manual.
Mira los capítulos default_statistics_target y costo_de_página_aleatorio en esta página Wiki de PostgreSQL generalmente útil.
Hay muchas otras razones posibles, pero estas son las más comunes con diferencia.