【发布时间】:2021-02-09 05:10:47
【问题描述】:
我有一个包含大约 1 亿个 url 的数据库,出于分片目的(以及识别唯一 url),我将每个条目索引设为完整 url 的 md5 哈希。
MD5 仅由 16 个可能的字符组成:0123456789abcdef,总长度为 32 个字符。
如果我使用较短的索引(如 8 个总字符),我应该期待什么性能优势(如果有的话)?例如使用包含大写、小写和特殊字符的散列函数(可能是自定义的)。
或者它会因为索引使用更多可能的字符而导致性能下降? (即使索引长度较短~8)。
【问题讨论】:
-
这是最好的问题之一理论。 MySQL 在实际负载下的行为方式完全无法预测。
-
另外值得注意的是,MD5 非常脆弱,如果你有那么多条目,你实际上可能会发生冲突。值得检查。 SHA2-256 是一个更安全的选择,但这可能会破坏这里的目的。
标签: mysql performance indexing database-performance