首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQLServer 2000中高效的分页(限制)查询?

问在SQLServer 2000中高效的分页(限制)查询?
EN

Stack Overflow用户
提问于 2009-02-02 15:21:15
回答 5查看 7.8K关注 0票数 10

在SQLServer 2000中执行分页查询最有效的方法是什么?

其中“分页查询”等同于在MySQL中使用LIMIT语句。

EDIT:在这种情况下,存储过程会比任何基于集合的查询更有效吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-06 16:05:52

获胜者是使用RowCount的Paging of Large Resultsets。此外,还有一个用于更复杂查询的通用版本。但要归功于Jasmin Muharemovic :)

代码语言:javascript
复制
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“信息。好了!

票数 12
EN

Stack Overflow用户

发布于 2009-02-02 15:25:56

我认为嵌套SELECT TOP n查询可能是完成此任务的最有效方法。

代码语言:javascript
复制
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()函数。

票数 6
EN

Stack Overflow用户

发布于 2009-02-07 03:29:18

查询的效率实际上取决于底层表的结构。假设您有一个名为ID的主键,它是一个标识,它是一个聚集索引,您可以假设没有人对它执行IDENTITY_INSERTs,您可以执行如下查询:

从表中选择TOP XXX,其中ID > @LastPagesID;

这将使您尽可能快地获得结果。其他真正有效的东西都是它的变种--也许它不是一个ID --也许你用来寻呼的实际上是一个你知道是唯一的日期,但你明白了……这里显示的基于IN ()的查询可能会起作用,但它们不会影响部分聚集或覆盖索引扫描的性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/503566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档