首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2012性能问题

Server 2012性能问题
EN

Stack Overflow用户
提问于 2013-09-25 09:54:32
回答 2查看 406关注 0票数 0

我们的Server 2012企业级设置有一个性能问题,我无法解释,我希望你们有一个想法。

我们有一个事实表,其中包含了大量的int列,我们还聚合了一个区域维度表。

这是我们事实表的结构:

  • regionId (int)
  • 收入(十进制10,2)
  • orderIntake (十进制10,2)

这是我们维度表的结构:

  • worldRegion(varchar(100)9
  • 簇(varchar(100))
  • 国家(varchar(100))
  • regionId (int)

事实表和维度表通过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')

是相当慢(> 8秒)约500 K的记录。

我们确实有以下几个地方:

  • ColumnStore列事实表的regionId索引
  • 维度表的聚集索引(regionId、country、集群、worldRegion)

从索引或整体结构的角度来看,有什么可以改变的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-25 10:07:53

dim表索引中列的顺序不允许在第二个查询的where子句中使用该索引。这是因为行由第一索引列(regionId)索引,然后由第二索引列(国家)等等索引。只使用第二列就像在只使用名字搜索某人时使用电话簿一样。尝试在country列上添加一个单独的索引,看看性能是否有所提高。

票数 2
EN

Stack Overflow用户

发布于 2013-09-25 11:42:55

如果没有执行计划,就很难看出问题是什么。我想知道您是否首先将维度表中的RegionID提取为表表达式或临时表,然后对事实表使用它们,如果执行速度更快的话。

也许这是:

代码语言:javascript
复制
WITH regionIDcte AS
 (
 SELECT regionId 
 FROM   regionDim 
 WHERE country IN ('France','Germany')
 )
SELECT SUM(revenue) 
FROM factTable f 
WHERE EXISTS 
  (
  SELECT *
  FROM regionIDcte x
  WHERE f.regionId = f.regionId
  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19001678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档