我有一个 varchar(384)来存储MyISAM表中的电子邮件,我想检查电子邮件是否存在但索引长度限制是 333字节(因为我'使用utf8(1000字节/ 3字节))。
那么搜索指定电子邮件的最佳方法是什么,使用FULLTEXT索引或在BINARY(16)中使用电子邮件md5-hash创建另一个字段(使用冲突检查)?
[编辑]
使用1M记录进行测试。
Fulltext index: ~300 ms
333 length index: ~15 ms
binary(16) md5-hash: ~15 ms
所以我认为最好的选择是性能中的第二个字段,但是......第二个字段=更大的表,这对性能或存储不利。因此,在电子邮件不超过150个字符的真实场景中,VARCHAR(384)中的150长度索引就足够了。
答案 0 :(得分:1)
在上周,我已经向我的数据库添加了100,000封不同的电子邮件(缓慢的一周)。
最长的是45个字符。钟形曲线的峰值为21-22个字符。
因此,如果您愿意,最多可存储384个,但只能索引前45个字符。即使在索引返回重复项的极少数情况下,从磁盘读取底层记录的额外I / O也不会杀死你。
祝你好运。