我需要存储,查询和更新大量的文件哈希。这种表的最佳mysql模式是什么?我应该使用散列索引吗。 CREATE INDEX hash_index on Hashes(id) using HASH; 我可以重用索引的pk散列吗(据我所知,“使用散列”将从散列创建散列)
CREATE INDEX hash_index on Hashes(id) using HASH;
bnl4lu3b1#
文件哈希是固定长度的数据项(除非在创建一些行之后更改哈希类型)。如果用十六进制或以64为基数表示文件哈希值,它们将包含字符和数字。例如,十六进制的sha-256哈希值需要64个字符(每个字符4位)。这些字符都是8位字符,因此不需要unicode。如果你在填写时很小心,你也不需要区分大小写。消除数据库列的所有这些特性会使值的搜索速度稍微加快。因此,使用ddl将哈希值设为固定长度的ascii列,如下所示:
hash CHAR(64) COLLATE 'ascii_bin'
您当然可以使用这样的列作为主键。raymond正确地指出,除了某些类型的表之外,mysql不提供散列索引。没关系:对于这种信息,普通的btree索引工作得相当好。
1条答案
按热度按时间bnl4lu3b1#
文件哈希是固定长度的数据项(除非在创建一些行之后更改哈希类型)。如果用十六进制或以64为基数表示文件哈希值,它们将包含字符和数字。例如,十六进制的sha-256哈希值需要64个字符(每个字符4位)。
这些字符都是8位字符,因此不需要unicode。如果你在填写时很小心,你也不需要区分大小写。消除数据库列的所有这些特性会使值的搜索速度稍微加快。
因此,使用ddl将哈希值设为固定长度的ascii列,如下所示:
您当然可以使用这样的列作为主键。
raymond正确地指出,除了某些类型的表之外,mysql不提供散列索引。没关系:对于这种信息,普通的btree索引工作得相当好。