【发布时间】:2019-08-16 09:13:37
【问题描述】:
我有一个从六个相同类型的表中收集数据的查询。为了创建最终选择,我使用 UNION ALL。不幸的是,优化器会依次扫描六个表中的每一个,然后将它们收集到一个表中。有没有办法让优化器并行扫描表?
|--Concatenation
|--Index Scan(OBJECT:([EGeoCache].[NonClusteredIndex-20190815-105027] AS [GC]))
|--Index Scan(OBJECT:([YGeoCache].[NonClusteredIndex-20190814-103125] AS [GC]))
|--Index Scan(OBJECT:([GGeoCache].[NonClusteredIndex-20190814-103358] AS [GC]))
|--Index Scan(OBJECT:([HGeoCache].[NonClusteredIndex-20190814-103422] AS [GC]))
|--Index Scan(OBJECT:([DGeoCache].[NonClusteredIndex-20190814-103305] AS [GC]))
|--Index Scan(OBJECT:([SGeoCache].[NonClusteredIndex-20190814-103457] AS [GC]))
SELECT
VEGC.AddressID
, VEGC.Lat
, VEGC.Lon
FROM vEGeoCache AS VEGC
UNION ALL
SELECT
VYGC.AddressID
, VYGC.Lat
, VYGC.Lon
FROM vYGeoCache AS VYGC
UNION ALL
SELECT
VGGC.AddressID
, VGGC.Lat
, VGGC.Lon
FROM vGGeoCache AS VGGC
UNION ALL
SELECT
VHGC.AddressID
, VHGC.Lat
, VHGC.Lon
FROM vHGeoCache AS VHGC
UNION ALL
SELECT
VDGC.AddressID
, VDGC.Lat
, VDGC.Lon
FROM vDGeoCache AS VDGC
UNION ALL
SELECT
VSGC.AddressID
, VSGC.Lat
, VSGC.Lon
FROM vSGeoCache AS VSGC
【问题讨论】:
-
这是一个非常好的问题。我不认为有办法让这些并行运行,但我很想知道是否有办法。
-
由于无法准确复现你的情况,我从多个表中选择了相同类型的字段,并行执行,开启
Include LIve Query Statistics,甚至可以看到并行。 -
表是否在不同的设备(或内存驻留)上,以便并行执行不会造成 I/O 瓶颈?否则,不清楚您期望从并行执行中获得什么好处。