我在SQL上工作,在性能方面不太专业。正在使用c#动态地形成查询,并且在我的脑海中有分页的目的
每次按分页时,我取10条记录,我的样例查询如下所示
Select *
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging
Where RowNumber BETWEEN 10 AND 20其中testId是主键。
效果很好。我发布了语法,因为这是机密数据。,它在6秒内执行
如果用户单击最后一页正在形成以下查询
Select *
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging
Where RowNumber BETWEEN 30000 AND 30010上面的查询需要40秒.
我错过的核心是什么?
每次我都有10张唱片但是时间上有很大的不同
谢谢
发布于 2013-10-01 13:43:46
恐怕这个问题是无法解决的。对于每一种方法,您都必须以某种方式计算每一行的数字,或者在某个临时表/索引视图中预先计算它们,或者让sql server动态地执行这些操作(当前的解决方案)。
如果您想提高当前查询的性能,请在TestId上添加和索引包含的列(即使它已经是PK) (必须包括将返回的所有列)。
create index idxI__testid on <yourtable> (TestId) include (<column1>,<column2>)但是,只有当您只想返回几个列时,这才有意义。
发布于 2019-09-04 14:51:19
1)需要对进行索引。按照建议创建索引时,请使用INCLUDE (要返回的列)。
2)尽量使用select TOP。例如:
Select * from (Select TOP 20 ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........)
as paging
Where RowNumber BETWEEN 10 AND 20https://stackoverflow.com/questions/19115834
复制相似问题