• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 列索引

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

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

    有关列索引的更多信息,请参见“ CREATE INDEX语句”。

    • 索引前缀
    • 全文索引
    • 空间指数
    • MEMORY存储引擎中的索引

    索引前缀

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

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

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

    注意

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

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

    有关索引前缀的更多信息,请参见“ CREATE INDEX语句”。

    全文索引

    FULLTEXT索引用于全文搜索。只有InnoDBMyISAM存储引擎支持FULLTEXT索引和仅适用于CHARVARCHARTEXT列。索引始终在整个列上进行,并且不支持列前缀索引。有关详细信息,请参见“全文搜索功能”。

    优化适用于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,因此全文查询可能会显示在该Extr 列中;在这种情况下,以后执行期间无需进行表访问。

    空间指数

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

    MEMORY存储引擎中的索引

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

    上篇:空间索引优化

    下篇:多列索引