在SQLServer 2000中执行分页查询最有效的方法是什么?
其中“分页查询”等同于在MySQL中使用LIMIT语句。
EDIT:在这种情况下,存储过程会比任何基于集合的查询更有效吗?
发布于 2009-02-06 16:05:52
获胜者是使用RowCount的Paging of Large Resultsets。此外,还有一个用于更复杂查询的通用版本。但要归功于Jasmin Muharemovic :)
DECLARE @Sort /* the type of the sorting column */
SET ROWCOUNT @StartRow
SELECT @Sort = SortColumn FROM Table ORDER BY SortColumn
SET ROWCOUNT @PageSize
SELECT ... FROM Table WHERE SortColumn >= @Sort ORDER BY SortColumn这篇文章包含完整的源代码。
请阅读"Update 2004-05-05“信息。好了!
发布于 2009-02-02 15:25:56
我认为嵌套SELECT TOP n查询可能是完成此任务的最有效方法。
SELECT TOP ThisPageRecordCount *
FROM Table
WHERE ID NOT IN (SELECT TOP BeforeThisPageRecordCount ID FROM Table ORDER BY OrderingColumn)
ORDER BY OrderingColumn将ThisPageRecordCount替换为每页邮件数,将BeforeThisPageRecordCount替换为(PageNumber - 1) * items-per-page。
当然,在SQL Server2005中更好的方法是在CTE中使用ROW_NUMBER()函数。
发布于 2009-02-07 03:29:18
查询的效率实际上取决于底层表的结构。假设您有一个名为ID的主键,它是一个标识,它是一个聚集索引,您可以假设没有人对它执行IDENTITY_INSERTs,您可以执行如下查询:
从表中选择TOP XXX,其中ID > @LastPagesID;
这将使您尽可能快地获得结果。其他真正有效的东西都是它的变种--也许它不是一个ID --也许你用来寻呼的实际上是一个你知道是唯一的日期,但你明白了……这里显示的基于IN ()的查询可能会起作用,但它们不会影响部分聚集或覆盖索引扫描的性能。
https://stackoverflow.com/questions/503566
复制相似问题