为什么执行计划中有排序任务

Nik*_*RED 1 sql-server

当我执行以下查询与执行计划.我可以看到'排序'是最费用列表任务.但我没有在我的查询中使用任何排序选项.为什么会发生?在选择之前存在嵌套循环连接任务.另请告诉我有关合并连接,散列连接和嵌套循环连接的信息.

在此输入图像描述

select
Ename from dbo.Employee e
where 
Salary>(
select AVG(Salary) from dbo.Employee where 
DeptId=e.DeptId 
group by DeptId)
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

它必须排序以确定哪些行的每个TerritoryID具有较低的工资- 因此排序是因为这种分区/分组.

您可以使用索引删除排序操作,例如:

CREATE INDEX d_s ON dbo.Employee(DeptId, Salary);
Run Code Online (Sandbox Code Playgroud)

但是,您必须确定此查询的增益是否在执行频率的上下文中证明了附加索引的合理性 - 这可能会影响工作负载的其他部分.您将在某个时候支付排序/分组费用.

也只是因为查询中的成本很高,并不意味着这是一个问题.这个查询速度慢吗?即使是一级方程式比赛也有一辆"慢速"赛车在最后一场比赛结束.