Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jaki jest najlepszy sposób na tworzenie stronicowania w SQL Server?

ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
    @FromRow int = 1000000,
    @PgSize int = 10
AS
BEGIN
    ;WITH RecordsRN AS
    (
        select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
    )
    SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@[email protected])
END

to jest zapytanie, którego używam do stronicowania. użyj go, a otrzymasz ur pożądane 10 rekordów w ciągu 4-5 sekund. otrzymuję 10 rekordów w 3 sekundy, a całkowita liczba rekordów w mojej bazie danych wynosi 10 milionów, nie używaj top 10, za każdym razem przyniesie tylko te same 10 rekordów. w moim przypadku utrzymuję rozmiar strony i początkowy numer wiersza (@FromRow) w sesji i przekazuję te dwie wartości do poniższej procedury składowanej i otrzymuję wynik. Co więcej, jeśli używasz SQL 2012, możesz chcieć użyć OFFSET i Pobierz następne 10 wierszy. wyszukaj w google słowo kluczowe OFFSET, a na górze zobaczysz żądany wynik.

dzięki



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usługa nie została całkowicie zatrzymana po ServiceController.Stop()

  2. Jak przekonwertować DateTime na TimeSpan w zapytaniu Entity Framework

  3. SQL:użyj klauzuli WHERE w OVER()?

  4. Jak oddzielić (podzielić) ciąg znaków przecinkiem w procedurze składowanej SQL Server

  5. Czy INNER JOIN może zapewnić lepszą wydajność niż EXISTS?