设计表索引

时间:2011-09-20 07:09:12

标签: database database-design indexing

在具有id,几个键值和其他几个“数据”列的表中:

T1:id,k1,k2,k3,data1,data2,...

id是唯一的。
k1有几百个不同的值 对于k1的每个不同值,k2有数千个不同的值 对于k1,k2的每个不同组合,有几十(或多一点)行,其中通常k3是所有那些记录的空字符串和一些其他k3值,它将仅出现一次每(k1,k2)和偶尔会出现两到三次。

我想获得一组记录where k1=K1V and K2=K2V and K3=K3V, 但我也知道这等同于询问where k1=K1V and K3=K3Vwhere k2=K2V and K3=K3V,因为K2的任何特定值都将始终具有相同的K1值。

或者我应该询问where K3=K3V and K2=K2V and K1=K1Vwhere K3=K3V and K1=K1Vwhere K3=K3V and K2=K2V? (因为K3列中空字符串值的重复)。

进行此查询的最佳方法是什么?我应该为此创建什么索引?

如果知道K1的不同值上的K2的不同值的量的差异很大,那么它会改变答案吗? (即一些K1V有5 K2V与他们相关,而其他人有thousends)

1 个答案:

答案 0 :(得分:0)

如果密钥之间存在依赖关系,则听起来您的表未规范化。我建议首先将表规范化为第3范式,然后将索引放在外键上(至少)。然后应添加其他索引以支持特定查询。