文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  列索引

10.3.5 列索引

最常见的索引类型涉及单个列,它将该列中的值副本存储在数据结构中,从而允许快速查找具有相应列值的对应行。B 树数据结构允许索引快速查找特定值、一组值或值的范围,对应于 WHERE 子句中的 =>BETWEENIN 等运算符。

每个表的最大索引数和最大索引长度由每个存储引擎定义。请参阅 第 17 章,InnoDB 存储引擎第 18 章,备用存储引擎。所有存储引擎都支持每个表至少 16 个索引,总索引长度至少为 256 个字节。大多数存储引擎都有更高的限制。

有关列索引的更多信息,请参阅 第 15.1.15 节,“CREATE INDEX 语句”

索引前缀

使用字符串列索引规范中的 col_name(N) 语法,您可以创建一个仅使用该列前 N 个字符的索引。以这种方式仅对列值的前缀进行索引可以使索引文件小得多。当您对 BLOBTEXT 列建立索引时,您必须为该索引指定前缀长度。例如

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

对于使用 REDUNDANTCOMPACT 行格式的 InnoDB 表,前缀长度最多为 767 个字节。对于使用 DYNAMICCOMPRESSED 行格式的 InnoDB 表,前缀长度限制为 3072 个字节。对于 MyISAM 表,前缀长度限制为 1000 个字节。

注意

前缀限制以字节为单位,而在 CREATE TABLEALTER TABLECREATE INDEX 语句中的前缀长度对于非二进制字符串类型(CHARVARCHARTEXT)解释为字符数,对于二进制字符串类型(BINARYVARBINARYBLOB)解释为字节数。在为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑到这一点。

如果搜索词超过索引前缀长度,则使用该索引排除不匹配的行,并检查剩余的行以查找可能的匹配项。

有关索引前缀的更多信息,请参阅 第 15.1.15 节,“CREATE INDEX 语句”

FULLTEXT 索引

FULLTEXT 索引用于全文搜索。只有 InnoDBMyISAM 存储引擎支持 FULLTEXT 索引,并且只适用于 CHARVARCHARTEXT 列。索引始终针对整个列进行,不支持列前缀索引。有关详细信息,请参阅 第 14.9 节“全文搜索函数”

对单个 InnoDB 表的某些类型的 FULLTEXT 查询应用了优化。具有以下特征的查询效率特别高:

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

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

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

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

这种行为的一个含义是,与在优化阶段不进行表达式评估的非全文查询相比,EXPLAIN 对于全文查询通常速度较慢。

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

空间索引

您可以在空间数据类型上创建索引。MyISAMInnoDB 支持空间类型上的 R 树索引。其他存储引擎使用 B 树对空间类型进行索引(ARCHIVE 除外,它不支持空间类型索引)。

MEMORY 存储引擎中的索引

MEMORY 存储引擎默认使用 HASH 索引,但也支持 BTREE 索引。