Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL erhält ROW_NUMBER und COUNT bei jeder SELECT-Anforderung

Dies soll wahrscheinlich das Paginieren ermöglichen. Das Anzeigen der Gesamtzahl der Zeilen kann sehr teuer werden.

Eine Möglichkeit, die meiner Meinung nach bei einer Vielzahl von Datenbanken gut funktioniert, besteht darin, die Arbeit in zwei Teile aufzuteilen. Zunächst sammelt man die ID der relevanten Zeilen in einer temporären Tabelle. Zweitens fragen Sie den vollständigen Datensatz ab. Die im ersten Teil gesammelten Daten bieten Ihnen eine einfache Möglichkeit, die Gesamtzahl der Zeilen und die IDs der Zeilen auf einer bestimmten Seite zu berechnen.

Hier ist ein grobes Beispiel für SQL Server. Beachten Sie, dass das Beispiel nicht auf Fensterfunktionen wie row_number() angewiesen ist , die in MySQL nicht verfügbar sind.

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 

Übrigens, wenn möglich, würde ich diese Anforderung an die Designer zurückgeben, um zu überprüfen, ob es sich lohnt, viel Zeit dafür aufzuwenden. Es ist viel einfacher, wenn Sie nicht die Gesamtzahl der Zeilen anzeigen müssen.