0

我正在尝试索引 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';
4

1 回答 1

3

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

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

HASH-indexes 仅适用于=and<=>运算符,因此您的示例用法teksti='random text'非常适合这种类型的索引(source)。如果您需要使用其他运算符,例如LIKE, <or>运算符,您可能不得不考虑改用B-TREE索引。

作为一个完整的替代选项,您可以查看FULLTEXTindex.html。这提供了大量的匹配功能,尽管它相当健壮并且可能太多。页面上的文档Full-Text Search Functions指出FULLTEXT只能与 MyISAM 一起使用,但是Section 14.2.4.12.3InnoDB Table and Index文档页面上涵盖FULLTEXT了 InnoDB 的索引 - 因此,这可能可用也可能不可用 =P。

于 2012-10-02T13:26:36.607 回答