如何在mysql中索引innodb文本?

时间:2012-10-02 11:28:08

标签: mysql hash indexing innodb

我正在尝试索引mysql innodb-table中的文本字段,看起来哈希索引是这样的:

CREATE INDEX teksti_index USING HASH ON maili_teksti(teksti(100));

那么,这是否意味着mysql占用该字段的前100个字符并计算哈希值(然后对哈希值进行索引)。如果我将数字100更改为200,那么索引的大小是否相同?

而且......如果我想优化这种命令,这是一种正确的方法:

SELECT count(*) from teksti where teksti='random text';

1 个答案:

答案 0 :(得分:3)

在处理CHARVARCHARTEXT列时(正如您处理TEXT),创建索引时分配的前缀长度将创建使用前X个字符的哈希 - 正是您的想法(source)。

当处理标准索引时,更改索引数据的大小也应该改变索引的大小(即 - 添加字符应该增加索引;删除应该减少)。在处理HASH索引时,这是一个猜测,因为我找不到关于它的具体文档,我会认为它不会增加(至少,不是很多)由于性质散列算法。

HASH索引仅适用于=<=>运算符,因此teksti='random text'的样本用法非常适合此类索引(source)。如果您需要使用其他运算符,例如LIKE<>运算符,则可能需要考虑切换到B-TREE索引。

作为完整的替代选项,您可以查看FULLTEXT索引。这提供了大量的匹配功能,虽然它相当强大并且可能太多Full-Text Search Functions页面上的文档指出FULLTEXT只能与MyISAM一起使用,Section 14.2.4.12.3文档页面上的FULLTEXT涵盖{{ 1}}与InnoDB的索引 - 所以,这可能是也可能不是= P。