mysql – 何时针对复合索引选择散列列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 何时针对复合索引选择散列列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1507字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 何时针对复合索引选择散列列](/upload/InfoBanner/zyjiaocheng/902/93bc33950a6c44a9b2641002a01d8b34.jpg)
我想知道在哪些情况下,使用复合索引时,首选带有索引的单个散列列应该是首选.
在我的情况下,我有两个表约1 mio数据集,其中一个从另一个表接收更新值(它是一个数据导入例程).
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和所需的indizes.
现在两个可能的更新/连接将是:
//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列,请使用哈希”.
提前致谢!
附:这是我的第一个问题,所以请原谅是否缺少某些东西.
解决方法:
使用复合索引.比较十个整数比比较两个字符串要快.此外,从理论上讲,MD5哈希不能保证是唯一的(虽然这不应该是一个实际问题).
内容总结
以上是互联网集市为您收集整理的mysql – 何时针对复合索引选择散列列全部内容,希望文章能够帮你解决mysql – 何时针对复合索引选择散列列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。