在MySQL中通过哈希优化搜索

时间:2013-09-30 10:51:42

标签: mysql query-optimization innodb

我有一个包含很多字段的InnoDB表,其中一个是32字节的唯一散列(典型的md5结果)。

我必须通过该哈希进行大量查询,但我的表开始变大(500.000条记录),这种搜索需要花费大量时间:

SELECT id FROM `table` WHERE `key`='Bj8DzS7RmCG41nLdgOp0kEhNtrfPo3KF'

这花了大约0.7s

我可以创建这个“哈希”32字节varchar列的索引,但是这个表增长很多,如果我必须优化表(重新索引),那么这需要花费很多时间(关于在我的情况下10分钟),锁定所有其他实时查询。

那么,优化查询的最佳方法是什么,你必须通过一个32字节的varchar字段进行搜索?

1 个答案:

答案 0 :(得分:0)

你需要一个简单的索引。

另外,你提到varchar但你的列不是可变长度,所以char(32)更合适。

如果您担心在插入新行时维护索引的成本,可以考虑将表分区为较小的块。例如,您可以根据哈希的第一个字符有16个单独的表,例如table_0,table_1 .... table_f - 现在每个表只包含30,000条记录。或者你可以在前两个字符上进行分区,以提供256个表。

虽然您可以手动执行此操作,但请结帐MySQL's built in support for partitioning too

相关问题