"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo obtener eficientemente el recuento de filas totales antes de aplicar el límite en PostgreSQL?

¿Cómo obtener eficientemente el recuento de filas totales antes de aplicar el límite en PostgreSQL?

Publicado el 2025-03-23
Navegar:705

How to Efficiently Get Total Row Count Before Applying LIMIT in PostgreSQL?

La mejor manera de determinar el recuento de resultados antes del límite de la aplicación

en la consulta de la base de datos, determinar el número total de resultados antes de aplicar el límite es crucial para la paginación. Actualmente, un enfoque común implica ejecutar la consulta dos veces: una vez para contar todos los resultados y otra vez con un límite para recuperar la página deseada. Sin embargo, este método puede ser ineficiente.

Afortunadamente, PostgreSQL 8.4 introdujo una solución más eficiente: funciones de ventana. Al usar una función de ventana, puede recuperar tanto el recuento de resultados totales como los resultados limitados en una sola consulta.

SELECT foo
     , count(*) OVER() AS full_count
FROM   bar
WHERE  
ORDER  BY 
LIMIT  
OFFSET ;

que si bien este método proporciona la información deseada, puede ser computacionalmente costosa, ya que todas las filas deben procesarse incluso si el límite se excluirá. El orden de operaciones en Postgres es el siguiente:

filtra filas basadas en donde cláusula

aplique funciones de ventana
  1. Resultados de orden de orden basado en el orden por
  2. los resultados de límite basados ​​en el límite y offset
  3. [&] [&] alternativo para el orden para los métodos alternativos para el método para el método para el método para el conteo de los métodos para el conteo de los métodos para el conteo de los métodos para el conteo de los métodos para el conteo para el límite. Recuperación
  4. además de las funciones de la ventana, hay métodos alternativos para recuperar el recuento de filas afectadas:

plpgsql

: obtener diagnósticos integer_var = row_count;

  • php : pg_num_rows
  • estos métodos proporcionan el recuento de filas afectadas por la consulta en lugar del recuento completo antes de la aplicación de límite. recursos relacionados:

[optimizar la consulta con offset en la gran cantidad en grande en grande Tabla] (https://dba.stackexchange.com/questions/128089/optimize-Query-with-fetset-N--Large-Table)

[Calcule el número de filas afectadas por la consulta por lotes en Postgresql] (https://stackoverflow.com/questions/4644316/calculate-number-of-rows-afected-by-batch-query-in-postgresql)

    Último tutorial Más>

    Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

    Copyright© 2022 湘ICP备2022001581号-3