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

Postgresql 9.x:Índice para optimizar consultas `xpath_exists` (XMLEXISTS)

Parámetros de costos del planificador

Esto me dice que su random_page_cost y seq_page_cost probablemente estén equivocados. Es probable que tenga un almacenamiento con E/S aleatorias rápidas, ya sea porque la mayor parte de la base de datos está almacenada en memoria RAM o porque está usando SSD, SAN con caché u otro almacenamiento donde la E/S aleatoria es inherentemente rápida.

Prueba:

SET random_page_cost = 1;
SET seq_page_cost = 1.1;

para reducir en gran medida las diferencias de parámetros de costo y luego volver a ejecutar. Si eso funciona, considere cambiar esos parámetros en postgresql.conf. .

Sus estimaciones de conteo de filas son razonables, por lo que no parece un problema de estimación errónea del planificador o un problema con estadísticas de tabla incorrectas.

Consulta incorrecta

Tu consulta también es incorrecta. OFFSET 0 LIMIT 1 sin ORDER BY producirá resultados impredecibles a menos que tenga la garantía de tener exactamente una coincidencia, en cuyo caso el OFFSET ... LIMIT ... las cláusulas son innecesarias y se pueden eliminar por completo.

Por lo general, es mucho mejor formular consultas como SELECT max(...) o SELECT min(...) donde sea posible; PostgreSQL tenderá a ser capaz de usar un índice para extraer el valor deseado sin hacer un costoso escaneo de tabla o un escaneo y clasificación de índice.

Consejos

Por cierto, para futuras preguntas, la wiki de PostgreSQL tiene buena información en la categoría de rendimiento y una guía para hacer Preguntas de consulta lenta .