【问题标题】:Index for a VARCHAR field with a 384 length in a MySQL databaseMySQL 数据库中长度为 384 的 VARCHAR 字段的索引
【发布时间】:2010-08-26 08:43:52
【问题描述】:

我有一个 varchar(384) 将电子邮件存储在 MyISAM 表中,我想检查电子邮件何时存在,但索引长度限制为 333 字节(因为我'm 使用 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 长度索引就足够了。

【问题讨论】:

  • 我知道我可以有一个 150 长度的字段来存储电子邮件。但我在玩假设的表格,384 是电子邮件的最大长度。

标签: mysql varchar myisam


【解决方案1】:

上周,我向我的数据库中添加了 100,000 封不同的电子邮件(缓慢的一周)。

最长的是 45 个字符。钟形曲线在 21-22 个字符处达到峰值。

因此,如果您愿意,最多可以存储 384 个字符,但只索引前 45 个字符。即使在索引返回重复项的极少数情况下,从磁盘读取基础记录的额外 I/O 也不会杀死您。

祝你好运。

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2019-05-28
    • 2011-03-02
    • 2018-02-08
    • 2011-05-29
    相关资源
    最近更新 更多