SQL 服务器:隐藏 "Sort" 插入到左连接查询的执行计划中

SQL Server: hidden "Sort" inserted in execution plan in left join query

SQL 2017 年标准 我在星型模式模型(数据仓库)中有一个数据库 为了填写一个事实 table,我有一个临时 table 大约有 470,0000 行的存储过程。 为了填写维度 ID,我在临时 table 和维度 table 之间进行了左连接操作。 例如:

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 个多小时。

执行计划显示瓶颈来自查询优化器插入的隐藏 "Sort" 操作!!!!

从每个维度读取数据时,sql 服务器在与临时 table 连接之前对维度数据进行排序。 在临时 table 上引入索引并没有解决问题。 甚至将查询限制在临时索引 table 的第一个字段也无济于事

使用

CREATE CLUSTERED COLUMNSTORE INDEX

就临时table解决了问题。 谢谢你们。 您可以查看 CLUSTERED COLUMNSTORE INDEX 了解更多详情 (如果您正在使用 SQL Server 2016 标准版,您将需要 SP2)