5.4 列索引

索引的最常见类型涉及单个列,该列将来自该列的值的副本存储在数据结构中,从而允许快速查找具有相应列值的行。 B树数据结构可以让索引快速查找特定值,一组值,或值的范围,对应于运营商, 如=, >,≤, BETWEEN,IN,等等,一在WHERE子句。

每个存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎每个表至少支持16个索引, 并且总索引长度至少为256个字节。大多数存储引擎都有更高的限制。

索引前缀

使用 字符串列的索引规范中的语法,您可以创建仅使用列首字符的索引 。以这种方式仅索引列值的前缀可以使索引文件小得多。为a 或 column 编制索引时 , 必须为索引指定前缀长度。例如: col_name(N)NBLOBTEXT

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10))); 前缀最长可以为1000个字节(InnoDB表中为767个字节 ,除非已 innodb_large_prefix设置)。

注意

前缀限制以字节为单位,而在前缀长度CREATE TABLE, ALTER TABLE和 CREATE INDEX语句被解释为非二进制串类型的字符数(CHAR, VARCHAR, TEXT对于二进制串类型),并且字节数(BINARY, VARBINARY, BLOB)。为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑到这一点。

如果搜索词超过索引前缀长度,则使用索引排除不匹配的行,然后检查其余行是否可能匹配。

全文索引

FULLTEXT索引用于全文搜索。只有InnoDB和 MyISAM存储引擎支持 FULLTEXT索引和仅适用于 CHAR, VARCHAR和 TEXT列。索引始终在整个列上进行,并且不支持列前缀索引。

优化适用于FULLTEXT针对单个InnoDB表的某些类型的 查询 。具有以下特征的查询特别有效:

  • FULLTEXT 仅返回文档ID或文档ID和搜索等级的查询。

  • FULLTEXT查询以分数的降序对匹配行进行排序,并应用一个 LIMIT子句以获取前N个匹配行。 为了应用此优化,必须没有 WHERE子句,只有一个 ORDER BY子句按降序排列。

  • FULLTEXT仅检索COUNT(*)与搜索词匹配的行的 值的查询,没有其他WHERE 子句。 将该WHERE子句编码为 ,没有任何比较运算符。 WHERE MATCH(text) AGAINST ('other_text')> 0

对于包含全文表达式的查询,MySQL在查询执行的优化阶段评估这些表达式。优化器不仅查看全文表达式并进行估计,而且还在制定执行计划的过程中对它们进行评估。

这种行为的含义是, EXPLAIN对于全文查询,通常比在优化阶段未进行任何表达式求值的非全文查询要慢。

EXPLAIN由于优化期间发生匹配Select tables optimized away,因此全文查询可能会显示在该Extra列中;在这种情况下,以后执行期间无需进行表访问。

空间指数

您可以在空间数据类型上创建索引。 MyISAM并InnoDB 支持有关空间类型的R树索引。其他存储引擎使用B树来索引空间类型(除外 ARCHIVE,不支持空间类型索引)。

MEMORY存储引擎中的索引 该MEMORY存储引擎使用 HASH默认的索引,而且还支持 BTREE索引。

Last updated