2

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

我必须通过该哈希进行大量查询,但我的表开始变大(500.000 条记录),并且此搜索需要很多时间:

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

这花了大约 0.7 秒

我可以创建这个“散列”32 字节 varchar 列的索引,但是这个表增长了很多,如果我必须优化表(重新索引),它需要很多时间(大约 10 分钟)我的情况),锁定所有其他实时查询。

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

4

1 回答 1

0

你需要一个索引,就这么简单。

此外,您提到 varchar 但您的列不是可变长度,因此 char(32) 会更合适。

如果您担心在插入新行时维护索引的成本,您可以考虑将表分区为更小的块。例如,基于散列的第一个字符,您可以有 16 个单独的表,例如 table_0、table_1....table_f - 现在每个表只包含 30,000 条记录。或者您可以对前 2 个字符进行分区以提供 256 个表。

虽然您可以手动执行此操作,但也可以查看MySQL 对分区的内置支持

于 2013-09-30T11:45:03.247 回答