Qual è la soluzione di paginazione più efficiente che utilizza SQL Server 2005 rispetto a una tabella con circa 5.000-10.000 righe? Ne ho visti parecchi là fuori ma niente li ha paragonati.La migliore soluzione di paging con SQL Server 2005?
risposta
Per una tabella di queste dimensioni, utilizzare un'espressione tabella comune (CTE) e ROW_NUMBER; utilizzare una piccola funzione per calcolare i record da riportare in base alle variabili @PageNumber
e @PageSize
(o qualsiasi altra cosa si voglia chiamare). Semplice esempio da uno dei nostri stored procedure:
-- calculate the record numbers that we need
DECLARE @FirstRow INT, @LastRow INT
SELECT @FirstRow = ((@PageNumber - 1) * @PageSize) + 1,
@LastRow = ((@PageNumber - 1) * @PageSize) + @PageSize
;
WITH CTE AS
(
SELECT [Fields]
, ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber
FROM [Tables]
WHERE [Conditions, etc]
)
SELECT *
-- get the total records so the web layer can work out
-- how many pages there are
, (SELECT COUNT(*) FROM CTE) AS TotalRecords
FROM CTE
WHERE RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC
Devi attendere l'esecuzione del proc una volta prima di poter ottenere il numero totale di pagine? – Caveatrob
PS: funziona così bene finora! – Caveatrob
Sì, il modo in cui lo facciamo è utilizzare i risultati del proc per compilare un piccolo oggetto di PagingInfo che gestisce il processo di scrittura dei collegamenti del numero di pagina. Supponendo che tu non stia facendo un numero pazzesco di join o chiamate di funzione nella query, questo bambino dovrebbe scappare quasi istantaneamente, quindi non è mai stato un problema per noi. Sono contento che stia lavorando per te :) –
Una delle migliori discussioni di varie tecniche di paging che abbia mai letto è qui: SQL Server 2005 Paging – The Holy Grail. Dovrai completare una registrazione gratuita su SQLServerCentral.com per visualizzare l'articolo, ma ne vale la pena.
Anche questo dovrebbe aiutare ..
SELECT * FROM
(
SELECT Row_Number() OVER(order by USER_ID) As RowID,
COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS,
select name from usertbl
)
As RowResults WHERE
RowID Between 0 AND 25
Non sono sicuro se il suo meglio di @keith versione.
- 1. SQL Server 2005 replica
- 2. Isoweek in SQL Server 2005
- 3. Downgrade di SQL Server 2008 a SQL Server 2005
- 4. Trova la dimensione di più database in SQL Server 2005
- 5. Entity Framework e SQL Server 2012 Paging
- 6. Come utilizzare BIT in SQL Server 2005
- 7. Quale metodo di paging (Sql Server 2008) per prestazioni MIGLIORI?
- 8. SQL Server 2005 IsNumeric non cattura '0310D45'
- 9. deadlock di SQL Server 2005 con indice non cluster
- 10. La colonna calcolata di SQL Server 2005 è persistente
- 11. Rimuovere sql server 2005 express per installare SQL Server 2008
- 12. SQL Server 2005 e ambito tabella temporaneo
- 13. SQL Server 2005 - Verifica valore DateTime nullo
- 14. Database SQL Server 2005 'In Recovery'
- 15. SQL Server 2005 ROW_NUMBER() senza ORDER BY
- 16. SQL Server 2005 Error 701 - dalla memoria
- 17. SQL Server 2005 Blocking Problem (ASYNC_NETWORK_IO)
- 18. Sql server Integration Services Compatibilità 2008-2005
- 19. sottoquery in UPDATE SET (sql server 2005)
- 20. Prestazioni MySQL vs SQL Server 2005/2008
- 21. SQL Server 2005: Nullable Foreign Key Constraint
- 22. Concatenate ntext in SQL Server 2005
- 23. SQL Server 2005: perché denominare le transazioni?
- 24. Come definire ENUM in SQL Server 2005?
- 25. SQL Server 2005: come sottrarre sei mesi
- 26. Memorizzare la data solo in SQL Server 2005
- 27. Ignora la prima riga in SQL Server 2005?
- 28. NHibernate paginazione con SQL Server
- 29. Perdita di precisione numerica del server SQL 2005
- 30. Come mappare uint in NHibernate con SQL Server 2005
possibile duplicato di [ASP.NET, SQL 2005 "paging"] (http://stackoverflow.com/questions/1058825/asp-net-sql-2005-paging) – M4N
Numerosi: http://stackoverflow.com/questions/tagged/pagination + sql-server –