在具有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=K3V
或where k2=K2V and K3=K3V
,因为K2的任何特定值都将始终具有相同的K1值。
或者我应该询问where K3=K3V and K2=K2V and K1=K1V
或where K3=K3V and K1=K1V
或where K3=K3V and K2=K2V
? (因为K3列中空字符串值的重复)。
进行此查询的最佳方法是什么?我应该为此创建什么索引?
如果知道K1的不同值上的K2的不同值的量的差异很大,那么它会改变答案吗? (即一些K1V有5 K2V与他们相关,而其他人有thousends)答案 0 :(得分:0)
如果密钥之间存在依赖关系,则听起来您的表未规范化。我建议首先将表规范化为第3范式,然后将索引放在外键上(至少)。然后应添加其他索引以支持特定查询。