0

我正在研究 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 条记录,但时间差异很大

谢谢

4

2 回答 2

0

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

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

create index idxI__testid on <yourtable> (TestId) include (<column1>,<column2>)

但这只有在您只想返回几列时才有意义。

于 2013-10-01T13:43:46.340 回答
0

1)testid需要被索引。按照建议创建索引时使用 INCLUDE(要返回的列)。

2)尝试使用选择TOP。例如:

Select * from (Select TOP 20 ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) 
as paging  
Where RowNumber BETWEEN 10 AND 20
于 2019-09-04T14:51:19.627 回答