我有一张q-gram表(2个字母的字符串)。我需要在CHAR(2)字段中加入另一个表。
将这些2-gram转换为数字(例如aa = 1,ab = 2,ac = 3)并将此表和引用表中的字段转换为INT并使用INT连接会更快吗?而?
亲切的问候
彼得
答案 0 :(得分:1)
可能不是。如果你是的话,最好使用smallint而不是int。另外,我不确定有一个varchar(2)列是否有意义。拥有varchar列会产生额外的开销,并且最多只保存一个字节。
您将拥有多少行数据?
答案 1 :(得分:1)
否,这可能不会更高效,此外,您还必须有一个额外的表来存储这些映射。
这将是一个额外的 JOIN 以及。
请记住为您的加入列应用正确的索引。
答案 2 :(得分:0)
这会是你的瓶颈吗?是否值得增加复杂性?
那就是说,你也可以把它CHAR(2)
。
答案 3 :(得分:0)
根据我的经验,将一个连接的键从字符串(特别是CHAR(2))更改为INT将不会产生可测量的差异。这是因为您的大部分开销是I / O而不是CPU。
一旦你进入更长的字符串(尤其是Unicode字符串),你就可以开始测量差异了。但即便如此,我认为由于数据和索引中的记录大小,它更多地与增加的I / O有关。