我们的SQL Server 2012 Enterprise安装程序存在性能问题,我无法解释,希望大家对此有所了解。
我们有一个事实表,其中包含一堆要汇总的int列以及一个区域维表。
这是事实表的结构:
这是我们的维度表的结构:
事实表和维度表通过INNER JOIN连接到regionId列上。只要我们不限制国家/地区,这样做的效果就很好。
例如
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秒)。
我们确实有以下地方:
从索引或整体结构的角度来看,我们有什么可以改变的吗?
暗表索引中的列顺序不允许在第二个查询的where子句中使用此索引。这是因为行是由第一个索引列(regionId),然后由第二个(国家)索引,依此类推。仅使用第二列就像仅使用名字搜索某人时使用电话簿。尝试在“国家/地区”列上放置一个单独的索引,看看效果是否有所改善。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句