这是索引MySQL数据库的TEXT列的正确方法吗?

Rys*_*nis 9 mysql indexing

我有一个从字符串到整数的映射.要将此映射存储在MySQL数据库中,我创建了下表:

CREATE TABLE map(
  Argument TEXT NOT NULL,
  Image INTEGER NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我为参数选择了TEXT类型,因为它的长度是不可预测的,目前最长的记录有2290个字符,平均长度是88个字符.

在我遇到性能问题后,我尝试在Argument列上添加索引,但发现我必须指定长度,所以为了避免这种限制,我添加了一个新的整数列,其中包含参数列值的哈希值(md5或其他).

ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
Run Code Online (Sandbox Code Playgroud)

和综合指数

CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
Run Code Online (Sandbox Code Playgroud)

从那时起,性能问题就消失了.我想问一下解决这个问题是否正确.

Bre*_*ker 3

我认为没有“正确”的方法,这取决于您使用该列的目的。

根据我的经验,必须/想要在大型文本列上进行选择是不寻常的;文本通常是通过其他键检索的数据(除非以其他方式索引 - 例如全文、Lucene - 但这似乎不是您正在做的事情)

如果您确实需要在大字段上进行精确匹配,那么使用哈希可能会更有效,因为它可能会让您保持较小的索引。我的猜测是,如果您需要使用大于哈希大小的索引大小(取决于值通常与文本开头的距离有多远),请使用哈希。

最好的办法就是尝试一下看看。用代表性数据分析这两种方法并找出答案。