我希望知道在哪些情况下,单个哈希列与索引应该优先于使用复合索引。
在我的情况下,我有两个表,每个表有大约100万条数据集,其中一个表从另一个表中接收更新后的值(这是一个数据导入程序)。
我的环境中使用MySQL 5.1和5.5。
示例:
当然,永久表也将拥有一个hash_col和所需的索引。 现在有两种可能的更新/连接方式:
那么应该选择哪种方法呢?有没有什么经验法则,比如说“如果你有多于X列,就使用哈希方法”?
提前感谢您的回答!
附言:这是我在这里的第一个问题,如有不当之处请谅解。
示例:
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列,就使用哈希方法”?
提前感谢您的回答!
附言:这是我在这里的第一个问题,如有不当之处请谅解。