mysql 中散列数据的最佳列类型

mas*_*ugo 3 mysql datatypes

在我的用例中,我有一个表,其中有一列包含散列(sha256)ID。我想知道哪种数据类型更好,因为它必须是唯一的,并且我需要对其进行搜索。

sha 算法生成开箱即用的二进制流。我可以在存储之前将其转换为十六进制或 base64。我想知道它是否方便或有必要满足我的需求

Ric*_*mes 5

如果您从十六进制开始,请UNHEX()在存储和HEX()获取时使用。用于BINARY(32)数据类型。这占用了恒定的 32 字节。

如果您从二进制开始,那么在转义到存储/加载时要小心。可能最好每种方式都进行双重转换。

确保有足够的 RAM。一旦索引变得大于 buffer_pool,系统就会因为 sha256(或任何其他哈希或 uuid)的随机性而变慢。

如果您使用 Base64,则使用CHAR(43) COLLATE ascii_bin,这将是一个 43 字节常量,并且区分大小写。

256 实在是太过分了。如果您有大约 2^85 个条目,则 2^85 个条目中只有一次发生哈希冲突的机会。仅对于 MD5 来说,这些数字就是 9 万亿。