首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server分页查询-性能考虑

Server分页查询-性能考虑
EN

Stack Overflow用户
提问于 2013-10-01 12:12:04
回答 2查看 99关注 0票数 0

我在SQL上工作,在性能方面不太专业。正在使用c#动态地形成查询,并且在我的脑海中有分页的目的

每次按分页时,我取10条记录,我的样例查询如下所示

代码语言:javascript
复制
Select * 
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging  
Where RowNumber BETWEEN 10 AND 20

其中testId是主键。

效果很好。我发布了语法,因为这是机密数据。,它在6秒内执行

如果用户单击最后一页正在形成以下查询

代码语言:javascript
复制
Select * 
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging  
Where RowNumber BETWEEN 30000 AND 30010

上面的查询需要40秒.

我错过的核心是什么?

每次我都有10张唱片但是时间上有很大的不同

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-10-01 13:43:46

恐怕这个问题是无法解决的。对于每一种方法,您都必须以某种方式计算每一行的数字,或者在某个临时表/索引视图中预先计算它们,或者让sql server动态地执行这些操作(当前的解决方案)。

如果您想提高当前查询的性能,请在TestId上添加和索引包含的列(即使它已经是PK) (必须包括将返回的所有列)。

代码语言:javascript
复制
create index idxI__testid on <yourtable> (TestId) include (<column1>,<column2>)

但是,只有当您只想返回几个列时,这才有意义。

票数 0
EN

Stack Overflow用户

发布于 2019-09-04 14:51:19

1)需要对进行索引。按照建议创建索引时,请使用INCLUDE (要返回的列)。

2)尽量使用select TOP。例如:

代码语言:javascript
复制
Select * from (Select TOP 20 ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) 
as paging  
Where RowNumber BETWEEN 10 AND 20
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19115834

复制
相关文章

相似问题

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