sql >> Base de Datos >  >> RDS >> PostgreSQL

Evite que PostgreSQL a veces elija un mal plan de consulta

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.