Saltar al contenido

Consulta PostgreSQL muy lenta con límite 1

Es importante comprender el código de forma correcta previamente a adaptarlo a tu proyecto si ttienes algo que aportar puedes comentarlo.

Solución:

Puede evitar este problema agregando un innecesario ORDER BY cláusula a la consulta.

SELECT * FROM object_values WHERE (objectID = 53708) ORDER BY timestamp, objectID DESC limit 1;

Se está encontrando con un problema que se relaciona, creo, con la falta de estadísticas sobre las correlaciones de filas. Considere reportarlo a pg-bugs como referencia si está usando la última versión de Postgres.

La interpretación que sugeriría para sus planes es:

  • limit 1 hace que Postgres busque una sola fila y, al hacerlo, asume que su object_id es lo suficientemente común como para que aparezca razonablemente rápido en un escaneo de índice.

    Según las estadísticas que le dio, su pensamiento probablemente sea que necesitará leer ~ 70 filas en promedio para encontrar una fila que se ajuste; simplemente no se da cuenta de que object_id y timestamp se correlacionan con el punto en el que realmente va a leer una gran parte de la tabla.

  • limit 3por el contrario, hace que se dé cuenta de que es bastante poco común, por lo que considera seriamente (y termina…) clasificando top-n las 1700 filas esperadas con el object_id quiere, porque es probable que hacerlo sea más barato.

    Por ejemplo, podría saber que la distribución de estas filas es para que estén todas empaquetadas en la misma área del disco.

  • no limit cláusula significa que obtendrá el 1700 de todos modos, por lo que va directamente al índice en object_id.

Solución, por cierto: agregue un índice en (object_id, timestamp) o (object_id, timestamp desc).

Empecé a tener síntomas similares en una tabla con muchas actualizaciones y lo que necesitaba en mi caso era

analyze $table_name;

En este caso, era necesario actualizar las estadísticas, lo que solucionó los planes de consulta lentos que se estaban produciendo.
Documentos de apoyo: https://www.postgresql.org/docs/current/sql-analyze.html

Te mostramos reseñas y valoraciones

Recuerda que te concedemos agregar una reseña si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *