Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL obtém ROW_NUMBER e COUNT em cada solicitação SELECT


Isso provavelmente serve para permitir a paginação. Mostrar o número total de linhas pode ser muito caro.

Uma maneira que descobri funcionar bem em uma variedade de bancos de dados é dividir o trabalho em duas partes. Primeiro, você coleta o ID das linhas relevantes em uma tabela temporária. Segundo, você consulta o conjunto de dados completo. Os dados coletados na primeira parte oferecem uma maneira fácil de calcular o número total de linhas e os IDs das linhas em uma determinada página.

Aqui está um exemplo aproximado para o SQL Server. Observe que o exemplo não depende de funções de janela como row_number() , que não estão disponíveis no 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 

A propósito, se possível, eu devolveria esse requisito aos designers para verificar se vale a pena gastar muito tempo. É muito mais simples se você não precisar exibir o número total de linhas.