繁体   English   中英

SQL Server:在左联接查询的执行计划中插入了隐藏的“排序”

[英]SQL Server: hidden “Sort” inserted in execution plan in left join query

SQL 2017 Standard我在星型模式模型(数据仓库)中有一个数据库来填充事实表,我有一个存储过程,其中的临时表约有470,0000行。 填写维度ID,我在临时表和维度表之间进行了左联接操作。 例如:

insert into factTable (...fields list...)
select t.Quantity1,t.Quantity2,d1.ID,d.ID,...,19.id from
MyTemp t
left outer join dim1 d1 on t.F1=d1.F1 and t.CompanyID=d1.CompanyID and t.DataSourceID=d1.DataSourceID
left outer join dim2 d2 on t.F2=d2.F2 and t.CompanyID=d2.CompanyID and t.DataSourceID=d2.DataSourceID
left outer join dim3 d3 on t.F3=d3.F3 and t.CompanyID=d2.CompanyID and t.DataSourceID=d2.DataSourceID
.......
left outer join dim19 d19 on t.F19=3.F19 and t.CompanyID=d19.CompanyID and t.DataSourceID=d19.DataSourceID

问题是当使用较少数量的联接时,例如仅对于前5或6个维,查询速度非常快。

进行19次加入后,耗时超过4个小时。

执行计划显示瓶颈来自查询优化器插入的隐藏“排序”操作!!!!

从每个维度读取数据时,SQL Server在加入临时表之前对维度数据进行排序。 在临时表上引入索引并不能解决问题。 即使将查询从临时表上的索引限制为第一个字段也无济于事

隐藏在执行计划中

隐藏排序-第二张图片

使用

CREATE CLUSTERED COLUMNSTORE INDEX

在临时表上解决了问题。 谢谢你们。 您可以检查CLUSTERED COLUMNSTORE INDEX以获取更多详细信息(如果您使用的是SQL Server 2016 Standard Edition,则需要SP2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM