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

Optimización de consultas de Postgres (forzar un escaneo de índice)

Para prueba puede forzar el uso del índice "deshabilitando" los escaneos secuenciales; mejor solo en su sesión actual:

SET enable_seqscan = OFF;

no use esto en un servidor productivo. Detalles en el manual aquí.

Cité "deshabilitar", porque en realidad no se pueden deshabilitar los escaneos de tablas secuenciales. Pero cualquier otra opción disponible ahora es preferible para Postgres. Esto probará que el índice de varias columnas en (metric_id, t) puede ser usado, pero no tan efectivo como un índice en la columna principal.

Probablemente obtenga mejores resultados cambiando el orden de las columnas en su PRIMARY KEY (y el índice utilizado para implementarlo detrás de las cortinas) a (t, metric_id) . O crea una adicional índice con columnas invertidas así.

  • ¿Un índice compuesto también es bueno para consultas en el primer campo?

Normalmente, no es necesario forzar mejores planes de consulta mediante la intervención manual. Si configura enable_seqscan = OFF conduce a un mucho mejor plan, es probable que algo no esté bien en su base de datos. Considere esta respuesta relacionada:

  • Evite que PostgreSQL a veces elija un mal plan de consulta