最常见的索引类型涉及单个列,将该列的值的副本存储在数据结构中,允许快速查找具有相应列值的行。B-tree数据结构允许索引快速查找特定值、一组值或一段值,这些值对应于操作符,如=
,>
,≤
,之间的
,在
等,在一个在哪里
条款。
每个表的最大索引数和最大索引长度是由每个存储引擎定义的。看到第15章,InnoDB存储引擎,第十六章,替代存储引擎.所有存储引擎支持每个表至少16个索引,总索引长度至少256字节。大多数存储引擎都有更高的限制。
有关列索引的其他信息,请参见第13.1.15节,“创建索引语句”.
与
在字符串列的索引规范中,您可以创建只使用第一个列的索引col_name
(N
)N
列的字符。用这种方法只索引列值的前缀可以使索引文件更小。当你索引a时团
或文本
列,你必须指定索引的前缀长度。例如:
CREATE TABLE (blob_col, INDEX(blob_col(10)));
前缀长度最多可达767字节InnoDB
使用冗余
或紧凑的
行格式。的前缀长度限制为3072字节InnoDB
使用动态
或压缩
行格式。对于MyISAM表,前缀长度限制为1000字节。
前缀限制以字节为单位,而前缀长度则以字节为单位创建表
,ALTER TABLE
,创建索引
语句被解释为非二进制字符串类型(字符
,VARCHAR
,文本
)和二进制字符串类型的字节数(二进制
,VARBINARY
,团
).在为使用多字节字符集的非二进制字符串列指定前缀长度时,要考虑到这一点。
如果一个搜索词超过索引前缀长度,索引将用于排除不匹配的行,并检查剩余的行以寻找可能的匹配。
有关索引前缀的其他信息,请参见第13.1.15节,“创建索引语句”.
全文
索引用于全文搜索。只有InnoDB
而且MyISAM
存储引擎的支持全文
索引,仅用于字符
,VARCHAR
,文本
列。索引总是在整个列上进行,不支持列前缀索引。有关详细信息,请参见第12.10节,"全文检索功能".
优化适用于某些类型的全文
查询单InnoDB
表。具有这些特征的查询特别高效:
全文
只返回文档ID或文档ID和搜索排名的查询。全文
按降序对匹配行进行排序的查询,并应用限制
子句获取前N个匹配行。要应用此优化,必须没有在哪里
条款只有一个命令
子句按降序排列。全文
的查询COUNT (*)
匹配搜索词的行值,不带其他参数在哪里
条款。代码在哪里
条款是匹配(
,没有任何文本
) ('other_text
”)> 0
比较运算符。
对于包含全文表达式的查询,MySQL会在查询执行的优化阶段评估这些表达式。优化器不只是查看全文表达式并进行估计,它实际上是在开发执行计划的过程中对它们进行评估。
这种行为的一个含义是解释
全文查询通常比优化阶段没有计算表达式的非全文查询慢。
解释
对于全文查询可能会显示选择已优化的表
在额外的
列由于在优化过程中发生匹配;在这种情况下,在以后的执行过程中不需要进行表访问。