sql >> Base de Datos >  >> RDS >> Mysql

SQL obtiene ROW_NUMBER y COUNT en cada solicitud SELECT

Esto probablemente esté destinado a permitir la paginación. Mostrar el número total de filas puede ser muy costoso.

Una forma que he encontrado que funciona bien en una variedad de bases de datos es dividir el trabajo en dos partes. Primero, recopila la ID de las filas relevantes en una tabla temporal. En segundo lugar, consulta el conjunto de datos completo. Los datos recopilados en la primera parte le brindan una manera fácil de calcular el número total de filas y las ID de las filas en una página determinada.

Aquí hay un ejemplo aproximado para SQL Server. Tenga en cuenta que el ejemplo no se basa en funciones de ventana como row_number() , que no están disponibles en MySQL.

create table #id_list (rn int identity, pk int);

insert   #id_list
         (pk)
select   customer_id
from     customers
where    name like '%Joe%';

select   (select  count(*) from #id_list) as total_rows
,        rn -- The row's number
,        name
,        birth_date
,        ... -- Other columns
from     #id_list id
join     customer c
on       c.pk = c.customer_id
where    rn between 15 and 29; -- Second 15-row page 

Por cierto, si es factible, devolvería este requisito a los diseñadores para que verifiquen si vale la pena dedicarle mucho tiempo. Es mucho más simple si no necesita mostrar el número total de filas.