ich einen serverseitige Daten Implementierung von Paging mit wintern/JPA, die zugrunde liegende Datenbank ist MS SQL Server 2008.Hibernate (/ JPA) serverseitige Paging und MS SQL Server
Die SQL wird wie folgt generiert:
criteria.setFirstResult(pagingParams.getDisplayStart())
.setMaxResults(pagingParams.getDisplayLength());
(die Hauptarbeit legt die entsprechenden Filter in der Erstellung/Sortierung, aber das ist hier nicht relevant)
Was ich beobachte, ist das folgende SQL:
page (0-20):
select top 20 this_.id as id11_9_,...
page (20-40):
select top 40 this_.id as id11_9_,...
page (40-60):
select top 60 this_.id as id11_9_,...
... und so weiter.
Offensichtlich ist dies (a) wird in ernsthafte Probleme ausgeführt werden, wenn das zugrunde liegende Suchresultates zu groß wird und (b) hat nicht viel mit Paging zu tun, überhaupt :-(
Wer hatte das gleiche Problem?
aktualisieren: Es scheint, als ob NHibernate (die .NET-Implementierung von Hibernate) takes advantage der Row_Number()
Funktion von T-SQL Schade, dass Hibernate nicht ...
Die Leistung wurde bei der Verwendung eines bestimmten Dialekts entsprechend der Engine-Version verbessert. Getestet auf SQL Server 2008 mit 70 000 Ergebnissen. Die Ausführungszeit wurde beim Erreichen der letzten Seite um fast 5 Mal reduziert – yodamad