在我的 MySQL 数据库中,我有一个字符串列(例如,一个 SHA 哈希),它增长得太长而无法放置索引。如何针对该列运行有效的查询?
- 我可以在列的第一个字符上放置一个索引
N
,但是使用这个“部分”索引的查询是什么样的呢? - 我可以创建带有
N
字符的第二列并在其上放置一个完整索引,作为“部分”索引的代理。然后我会查询,获取一条或多条记录,然后在内存中执行最后一步过滤。 - 我可以使用全文搜索功能,但是我需要使用 MyISAM。MyISAM 不支持 ACIDity,因此不,谢谢。
在 MySQL 中实现这一目标的正确方法是什么?
问题不在于减少我的列的大小或重新配置我的数据库,如果它配置了太短的密钥长度。这是关于轻松地利用部分索引或类似的东西,最好不要给应用程序增加负担或弹出额外的列。
在我的特殊情况下,我正在寻找 UTF8 表中两列的复合键:
create table fingerprinted_item (
type varchar (512) not null,
fingerprint varchar (512) not null,
primary key (fingerprint, type)
);
-- Then there may be a child table.
MySQL 说:
[42000][1071] Specified key was too long; max key length is 767 bytes
在不同的服务器上,最大密钥长度为 1000 字节。