
排序操作符表示,它只有100行要排序。这怎么可能比阅读190万行更昂贵呢?我一定是读错了或者误解了什么。
另外,排序操作符中的估计每个执行中的行数如何只有100行?如果索引查找操作符估计每个执行的行数为190万行,那么如何将只有100行的行以管道方式传递到排序操作符?
以下是查询:
DECLARE @PageIndex INT = 1000;
DECLARE @PageCount INT = 1000;
SELECT ID
FROM dbo.Table1
WHERE DateCreated >= '2021-10-27'
AND
DateCreated < '2021-10-28'
ORDER BY ID
OFFSET @PageIndex * @PageCount ROWS FETCH NEXT @PageCount ROWS ONLY 发布于 2021-10-29 17:08:52
在返回任何行之前,排序操作符(相对于"Top N排序“)将在其open方法中对其全部输入进行排序。
Server估计,into将输出190万行进入该排序。
因此,费用是对190万行进行分类。
你在做什么
OFFSET 1000000 ROWS FETCH NEXT 1000 ROWS ONLY 排序的实际输出行至少为1001,000 (maybe more in a parallel plan),TOP运算符为偏移量丢弃第一个百万行,然后在收到要返回的1000行后停止请求行。
100的估计只是猜测,因为Server不知道编译计划时在运行时变量的值是多少。
https://stackoverflow.com/questions/69772305
复制相似问题