我有一个从字符串到整数的映射。为了将此 map 存储在 MySQL 数据库中,我创建了下表:
CREATE TABLE map(
Argument TEXT NOT NULL,
Image INTEGER NOT NULL
)
我选择了TEXT类型作为参数,因为它的长度是不可预测的,目前最长的记录有2290个字符,平均长度是88个字符。
遇到性能问题后,我尝试在 Argument
列上添加索引,但发现我必须指定长度,因此为了避免此限制,我添加了一个包含哈希值的新整数列(md5 或其他)参数列值。
ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
和联合索引
CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
从那时起,性能问题就消失了。我想问一下,这是否是解决这个问题的正确方法。
最佳答案
我认为没有“正确”的方法,这取决于您使用该列的目的。
根据我的经验,不得不/想要在大文本列上进行选择是不常见的;文本通常是由其他一些键检索到的数据(除非以其他方式索引 - 例如全文,Lucene - 但这似乎不是你在做什么)
如果您确实需要在一个大字段上进行精确匹配,那么使用散列可能更有效,因为它可能会让您保持较小的索引。我的猜测是,如果您需要使用大于散列大小的索引大小(取决于距离 TEXT 开头的距离,值通常不同),请使用散列。
最好的办法是尝试看看。使用代表性数据分析这两种方法并找出答案。
关于mysql - 索引 MySQL 数据库的 TEXT 列是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269557/