586 Stimmen

Wie lassen sich die Ergebnisse in SQL Server am besten paginieren?

Was ist der beste Weg (Leistung wise) zu paginieren Ergebnisse in SQL Server 2000, 2005, 2008, 2012, wenn Sie auch die Gesamtzahl der Ergebnisse (vor paginieren) erhalten möchten?

-1voto

user919426 Punkte 7177

Für die ROW_NUMBER Technik können Sie, wenn Sie keine Sortierspalte haben, die Sie verwenden können, die CURRENT_TIMESTAMP wie folgt:

SELECT TOP 20 
    col1,
    col2,
    col3,
    col4
FROM (
    SELECT 
         tbl.col1 AS col1
        ,tbl.col2 AS col2
        ,tbl.col3 AS col3
        ,tbl.col4 AS col4
        ,ROW_NUMBER() OVER (
            ORDER BY CURRENT_TIMESTAMP
            ) AS sort_row
    FROM dbo.MyTable tbl
    ) AS query
WHERE query.sort_row > 10
ORDER BY query.sort_row

Dies hat sich für mich bei Suchen über Tabellengrößen von bis zu 700.000 bewährt.

Damit werden die Datensätze 11 bis 30 abgerufen.

-1voto

salem albadawi Punkte 59
create PROCEDURE SP_Company_List (@pagesize int = -1 ,@pageindex int= 0   ) > AS BEGIN  SET NOCOUNT ON;

    select  Id , NameEn     from Company  ORDER by Id ASC  
OFFSET (@pageindex-1 )* @pagesize   ROWS FETCH NEXt @pagesize ROWS ONLY END  GO

DECLARE   @return_value int

EXEC  @return_value = [dbo].[SP_Company_List]         @pagesize = 1 ,         > @pageindex = 2

SELECT    'Return Value' = @return_value

GO

-1voto

Alex M Punkte 135

Dieses Bit gibt Ihnen die Möglichkeit, mit SQL Server und neueren Versionen von MySQL zu paginieren und trägt die Gesamtzahl der Zeilen in jeder Zeile. Verwendet Ihren primären Schlüssel, um die Anzahl der eindeutigen Zeilen zu zählen.

WITH T AS
(  
  SELECT TABLE_ID, ROW_NUMBER() OVER (ORDER BY TABLE_ID) AS RN
  , (SELECT COUNT(TABLE_ID) FROM TABLE) AS TOTAL 
  FROM TABLE (NOLOCK)
)

SELECT T2.FIELD1, T2.FIELD2, T2.FIELD3, T.TOTAL 
FROM TABLE T2 (NOLOCK)
INNER JOIN T ON T2.TABLE_ID=T.TABLE_ID
WHERE T.RN >= 100
AND T.RN < 200

-21voto

Horcrux7 Punkte 22751

Sie haben weder die Sprache noch den Treiber angegeben, den Sie verwenden. Daher beschreibe ich es abstrakt.

  • Erstellen Sie eine blätterbare Ergebnismenge/Datensatz. Dies erforderte eine Primärdatei für die Tabelle(n)
  • zum Ende springen
  • Abfrage der Zeilenzahl
  • zum Anfang der Seite springen
  • durch die Zeilen bis zum Ende der Seite blättern

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X