我们的 SQL Server 2012 Enterprise 设置存在性能问题,我无法解释,希望大家有所了解。
我们有一个事实表,其中包含我们聚合的一堆 int 列以及一个区域维度表。
这是我们的事实表的结构:
- regionId (int)
- 收入(十进制 10,2)
- orderIntake (十进制 10,2)
这是我们维度表的结构:
- 世界区域(varchar(100)9
- 集群(varchar(100))
- 国家 (varchar(100))
- regionId (int)
事实表和维度表通过 regionId 列上的 INNER JOIN 连接。只要我们不限制国家,这方面的表现是相当不错的。
例如
SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId
速度很快(<1 秒)。
然而
SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId WHERE r.country IN ('France','Germany')
对于大约 50 万条记录,速度非常慢(> 8 秒)。
我们确实有以下 indizes:
- regionId 列上事实表上的 ColumnStore 索引
- 维度表上的聚集索引 (regionId,country,cluster,worldRegion)
从索引或整体结构的角度来看,我们有什么可以改变的吗?