首页 > 解决方案 > 哈希表的 MySQL 模式

问题描述

我需要存储、查询和更新大量文件哈希。这种表的最佳 mysql 模式是什么?我应该使用哈希索引,例如。

CREATE INDEX hash_index on Hashes(id) using HASH;

我可以为索引重用 PK 哈希吗?(据我了解,“使用散列”将从散列创建散列)

标签: mysql

解决方案


文件散列是固定长度的数据项(除非您在创建一些行后更改散列类型)。如果您以十六进制或 Base 64 表示您的文件哈希,它们将包含字符和数字。例如,十六进制的 sha-256 散列需要 64 个字符(每个字符有 4 位)。

这些字符都是 8 位字符,所以不需要 unicode。如果你小心填写它们,你也不需要区分大小写。消除数据库列的所有这些特性会使值的搜索速度稍快一些。

因此,使用 ddl 将哈希设置为固定长度的 ASCII 列,如下所示:

    hash CHAR(64) COLLATE 'ascii_bin'

您当然可以使用这样的列作为主键。

Raymond 正确地指出,除了某些类型的表之外,MySQL 不提供散列索引。没关系:普通的 BTREE 索引对于此类信息工作得相当好。


推荐阅读