使用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之间的行为有很大差异吗?
答案 0 :(得分:1)
根据您的实际数据,前缀索引可能是您的解决方案。
MySQL允许您设置仅查看字段的前N个字符的索引。例如,仅索引前20个字符:
ALTER TABLE mytable ADD KEY(code(20));
要索引的字符数取决于您的数据。例如,如果所有记录中的字符串都以相同的3个字母开头,那么前缀索引为3将根本无法帮助您。您需要扫描数据以确定该数据集的正确索引长度。
在此Percona Best Practices presentation中选择前缀长度有一些提示(搜索选择前缀长度)。