我需要存储,查询和更新大量文件哈希。这种表的最佳mysql模式是什么?我应该使用哈希索引吗?
CREATE INDEX hash_index on Hashes(id) using HASH;
是否可以将PK哈希重用于索引? (据我了解,“使用哈希”将从哈希创建一个哈希)
答案 0 :(得分:0)
文件散列是固定长度的数据项(除非在创建了某些行之后更改了散列类型)。如果您用十六进制或Base 64表示文件哈希,则它们中将包含字符和数字。例如,十六进制的sha-256散列需要64个字符(每个字符四位)。
这些字符都是8位字符,因此不需要unicode。如果您对填写它们很小心,则也不需要区分大小写。消除数据库列的所有这些功能可以使值的搜索速度更快。
因此,使用ddl将哈希值定长为ASCII列:
hash CHAR(64) COLLATE 'ascii_bin'
您当然可以将此类列用作主键。
Raymond正确地指出,除某些类型的表外,MySQL不提供哈希索引。没关系:普通的BTREE索引对于此类信息相当有效。