我有一个MySQL InnoDB数据库,表格中的一个字段是term VARCHAR(255) CHARACTER SET utf8 NOT NULL
这个太大了,因为它可能是255 * 3 = 765个字节。它仍然在InnoDB的767字节范围内,但我希望通过减少索引的大小来加速基于term
的搜索以及节省空间。
我没有使用term
作为键,而是决定使用term
的哈希值。
我应该使用什么样的哈希方法?
编辑:我正在存储搜索字词,例如"如何找到新车"," iphone 5","最好的yugioh卡"等
答案 0 :(得分:2)
最好的方法是使用MD5:
CREATE TABLE termtable
(
id int not null auto_increment,
term VARCHAR(255) CHARACTER SET utf8 NOT NULL,
termhash char(32) not null,
primary key (id),
key (termhash)
);
如果您要查找一个特定值,并且这些值的长度可能超过32个字符,则可以存储哈希值:
INSERT INTO mytable (term,termhash)
VALUES ('a long string',MD5('a long string'));
这样,您只需要哈希值来检索结果
SELECT * FROM termtable WHERE termhash = MD5('a long string');
答案 1 :(得分:1)
MySQL包含MD5算法。生成的哈希只有32个十六进制字符,或16个二进制"字节"。