美文网首页
讲讲MySQL中的索引

讲讲MySQL中的索引

作者: overflowedstack | 来源:发表于2021-06-08 08:26 被阅读0次

MySQL索引文档
MySQL Index Document

MySQL里有很多种类的索引,整理出来加深了解。

主键索引与唯一索引

  1. 主键索引
    在主键上建立索引。主键索引是聚集索引。
    主键不能重复,不能为空。一张表只能有一个主键索引。

如果没有定义主键,那么会使用第一非空的唯一索引(NOT NULL and UNIQUE INDEX)作为聚簇索引 - 如果既没有主键也找不到合适的非空索引,那么InnoDB会自动生成一个不可见的名为ROW_ID的列名为GEN_CLUST_INDEX的聚簇索引,该列是一个6字节的自增数值,随着插入而自增.

  1. 唯一索引
    一个列,不允许重复(允许为空),可以建立它们的唯一索引。唯一索引可以约束此列插入时不能重复。
    一张表可以有建立多个唯一索引。

  2. 联合索引
    多个列组合建立索引,即为联合索引。

聚集索引与非聚集索引

mysql索引一般都是用B+树来构建。

  1. 聚集索引
    当索引与表数据存在一起,即定位到了索引,同时就拿到了数据,那么这是聚集索引。主键索引就是聚集索引,它决定了数据的物理存储,因此一张表只能有一个主键索引。


    聚集索引
  1. 非聚集索引
    当找到了索引,拿到的是表数据的地址,而不是数据本身,那么它是非聚集索引。唯一索引可能是非聚集索引。
    例如某张表T,列a,b,c,d,e,主键是a列,在b,c,d列建立了联合索引。那么此时bcd列的索引树,叶子结点存放的是索引及对应的主键值(a列值)。需要再拿着对应的主键值,去查找主键索引,才能最终拿到具体的行数据。


    非聚集索引(联合索引)

覆盖索引

覆盖索引,指的是select的列包含在了索引列中。
例如表T,列a,b,c,d。a为主键,在(b,c)组合上建立了唯一索引。
执行select a, b, c from T where b = 'hanmeimei' and c = 'female'.
此时会去查找(b,c)的索引B+树,找到了相应的叶子结点,在叶子结点上有数据b,c,以及主键a,即直接拿到了所需要的数据,不需要再去找其他列的数据。这种情况叫做覆盖索引。

use index, force index, ignore index

  1. use index 建议mysql使用某个索引
    use index 只是给mysql优化器一种选择的可能,具体的mysql优化器再进行优化选择.
SELECT * FROM TABLE1 USE INDEX (FIELD1) 
  1. force index 强制使用索引
SELECT * FROM TABLE1 FORCE INDEX (FIELD1) 
  1. ignore index 忽略索引
SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) 

相关文章

  • 讲讲MySQL中的索引

    MySQL索引文档[https://www.mysqlzh.com/doc/215/430.html]MySQL ...

  • MySQL索引背后的数据结构及算法原理

    参考来源 mysql索引分析 MySQL索引背后的数据结构及算法原理 MySQL中EXPLAIN命令详解 索引连接...

  • 20、MySQL 索引类型有哪些?

    MySQL 索引类型有哪些? 主键索引 索引列中的值必须是唯一的,不允许有空值。 普通索引 MySQL中基本索引类...

  • Mysql之索引的基本概念语法

    1.Mysql中索引的概念 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检...

  • 索引

    mysql中的索引 MySQL中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引...

  • 对于Mysql索引的理解(二)

    对于Mysql的索引有很多比较专业的词汇,这次就来讲讲这些回表查询、索引覆盖、最佳左前缀、索引下推。 1. 回表查...

  • 索引

    MYSQL索引 MYSQL中索引文件以B树结构存储,索引可分为单列索引和多列索引。 对于多列索引中,当一个SQL语...

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • mysql的索引呢?你又知道多少?

    mysql的索引呢?你又知道多少? 在Java面试中必问mysql,问mysql的时候索引也是必问,可见索引有多么...

  • 谈谈什么是MySql的索引

    索引是什么 生活中的索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。...

网友评论

      本文标题:讲讲MySQL中的索引

      本文链接:https://www.haomeiwen.com/subject/xbrzsltx.html