构建稀疏MySQL表的最佳方法是什么?

时间:2013-11-26 09:12:54

标签: mysql performance optimization database-design

我建造一张大桌子,出于统计目的,我有很多不同的属性(在某些情况下)有很多不同的值。我想知道建造这样的桌子的最佳方法是什么。

表格将如下(http://sqlfiddle.com/#!2/3d2793):

create table T (
    id    INT(11) PRIMARY KEY AUTO_INCREMENT,
    colA  INT(11),
    colB  VARCHAR(32),
    colC  VARCHAR(10),
    colD  VARCHAR(10),
    colE  INT(2),
    colF  VARCHAR(10),
    colG  TINYINT,
    colH  TINYINT,
    colI  TINYINT,
    colJ  INT(4),
    UNIQUE(colA,colB,colC,colD,colE,colF,colG,colH,colI)
);

除了最后一列之外的所有列都是此列的可能过滤器(例如"所有行都有colB =' a',colD =' c'和colG! = 1"),并且都具有被用作过滤器的相同概率。这些列的基数从18到2不等。

从A到F的列的值组合具有相同的概率,而列G,H和I与列B的某些值相关并具有以下概率:

 col | val |   %  |   col | val |   %  |   col | val |   %  |
-----|-----|------|  -----|-----|------|  -----|-----|------|
colG |  0  | 77.0 |  colH |  0  | 93.3 |  colI |  0  | 99.1 |
-----|-----|------|  -----|-----|------|  -----|-----|------|
colG |  1  |  5.8 |  colH |  1  |  1.5 |  colI |  1  |  0.9 |
-----|-----|------|  -----|-----|------|
colG |  2  |  7.4 |  colH |  2  |  1.6 |
-----|-----|------|  -----|-----|------|
colG |  3  |  9.8 |  colH |  3  |  3.6 |

我想过水平地建造桌子,但是它的列数太多了,所以我选择了这个垂直方向。设计,但考虑到我发现它可能在某些时候有大约20M +行的基数,目前我们无法以任何方式对表进行分区。所以可能是混合方法(大多数属性的垂直设计,一些值作为列),或者可能使用一些辅助表(我考虑使用表格来组合col,G和H)。

实现这一目标的最佳方法是什么?

0 个答案:

没有答案