有一个针对varchar(6000)或md5总和的索引(用于与整个值进行比较,而不仅仅是其中的一部分)?

时间:2013-11-23 11:01:26

标签: mysql innodb

使用MySQL,我必须将新值与作为varchar(6000)的列code上的行进行比较。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - --
| id (int(11))| code     (varchar(6000))                 | 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - --
| 1           | alpha : function bar(1)                  |
| 2           | dog.hasFourLegs()                        |
 ...

我检查新输入code是否等于数据库中的输入{'频繁'(每10分钟一次)。 我显然可以使用md5总和为code的新列,并比较md5总和,并将此md5_code编入索引。但是不是将code varchar(6000)编入索引更有效吗? (在时间上和存储空间中有效)。 从长远来看,该表将有大约30万行。使用Innodb。

额外的问题:对于这个问题,innodb和mysam之间的行为有很大差异吗?

1 个答案:

答案 0 :(得分:1)

根据您的实际数据,前缀索引可能是您的解决方案。

MySQL允许您设置仅查看字段的前N个字符的索引。例如,仅索引前20个字符:

ALTER TABLE mytable ADD KEY(code(20));

要索引的字符数取决于您的数据。例如,如果所有记录中的字符串都以相同的3个字母开头,那么前缀索引为3将根本无法帮助您。您需要扫描数据以确定该数据集的正确索引长度。

在此Percona Best Practices presentation中选择前缀长度有一些提示(搜索选择前缀长度)。