SQL查询性能 - 具有较少行的宽表或具有大量行的窄表?

时间:2011-11-29 14:55:08

标签: sql performance

我想在星型模式中对事实表进行查询。

我需要捕获很多价值,例如总销售额净销售区域销售额等,以结合其他几个PK值。

我有两个选择:

  1. 一行包含PK和许多列,其中包括总销售额,区域销售等等。
  2. 将度量作为维度,因此PK会更大 - 会在行中添加列度量。 PK旁边只有一个值。所以我用一个Measure将很多行的多行分解为一行。
  3. 什么是性能更好,插入和选择?

2 个答案:

答案 0 :(得分:3)

如果您有一行包含所有值,则会出现争用问题,假设您有同时插入/更新和读取。

拥有一个宽表也意味着将来添加新措施要困难得多 - 它需要更改表模式,这会锁定表并导致其他问题。

您的SELECT性能应该类似,除非您在同一个查询中为同一个PK提取多个值,在这种情况下,更宽的表可能会更快一些。

答案 1 :(得分:1)

事实上,您的最低粒度级别是多少?当你提到区域销售和总销售净额等事情时,我认为你可能会混淆措施和维度。例如:区域将是销售事实的维度。