首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么排序操作符在这个执行计划中的成本这么高?

为什么排序操作符在这个执行计划中的成本这么高?
EN

Stack Overflow用户
提问于 2021-10-29 16:45:08
回答 1查看 201关注 0票数 2

排序操作符表示,它只有100行要排序。这怎么可能比阅读190万行更昂贵呢?我一定是读错了或者误解了什么。

另外,排序操作符中的估计每个执行中的行数如何只有100行?如果索引查找操作符估计每个执行的行数为190万行,那么如何将只有100行的行以管道方式传递到排序操作符?

以下是查询:

代码语言:javascript
复制
    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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-29 17:08:52

在返回任何行之前,排序操作符(相对于"Top N排序“)将在其open方法中对其全部输入进行排序。

Server估计,into将输出190万行进入该排序。

因此,费用是对190万行进行分类。

你在做什么

代码语言:javascript
复制
OFFSET 1000000 ROWS FETCH NEXT 1000 ROWS ONLY 

排序的实际输出行至少为1001,000 (maybe more in a parallel plan),TOP运算符为偏移量丢弃第一个百万行,然后在收到要返回的1000行后停止请求行。

100的估计只是猜测,因为Server不知道编译计划时在运行时变量的值是多少。

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

https://stackoverflow.com/questions/69772305

复制
相关文章

相似问题

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