何时选择哈希列而不是复合索引?

4
我希望知道在哪些情况下,单个哈希列与索引应该优先于使用复合索引。 在我的情况下,我有两个表,每个表有大约100万条数据集,其中一个表从另一个表中接收更新后的值(这是一个数据导入程序)。 我的环境中使用MySQL 5.1和5.5。
示例:
CREATE TABLE permanent (
ref_id_1 INT(10),
ref_id_2 INT(10),
ref_id_3 INT(10),
ref_id_4 INT(10),
ref_date DATE,
value INT(10));

CREATE TABLE import (
ref_id_1 INT(10),
ref_id_2 INT(10),
ref_id_3 INT(10),
ref_id_4 INT(10),
ref_date DATE,
value INT(10));

//Option 1
ALTER TABLE import ADD UNIQUE INDEX idx_composite(ref_id_1,ref_id_2,ref_id_3,ref_id_4,ref_date);
//Option 2
ALTER TABLE import ADD hash_col CHAR(32);
UPDATE import SET hash_col = MD5(CONCAT(ref_id_1,ref_id_2,ref_id_3,ref_id_4,ref_date)); 
ALTER TABLE import ADD UNIQUE INDEX idx_hash_col(hash_col);

当然,永久表也将拥有一个hash_col和所需的索引。 现在有两种可能的更新/连接方式:
//Join via columns 
UPDATE permanent
INNER JOIN import
ON import.ref_id_1 = permanent.ref_id_2
AND import.ref_id_2 = permanent.ref_id_2
AND import.ref_id_3 = permanent.ref_id_3
AND import.ref_id_4 = permanent.ref_id_4
AND import.ref_date = permanent.ref_date 
SET permanent.value = import.value;

//Join via Hash-col
UPDATE permanent
INNER JOIN import
ON import.hash_col = permanent.hash_col
SET permanent.value = import.value

那么应该选择哪种方法呢?有没有什么经验法则,比如说“如果你有多于X列,就使用哈希方法”?
提前感谢您的回答!
附言:这是我在这里的第一个问题,如有不当之处请谅解。
1个回答

1

使用复合索引。比较十个整数比比较两个字符串更快。此外,理论上,MD5哈希值不能保证唯一性(尽管这不应该是太大的实际问题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接