美文网首页
mysql索引分类

mysql索引分类

作者: kingTao_ | 来源:发表于2021-01-15 12:12 被阅读0次

常见的索引类型

索引类型,非MySQL独有
1.hash索引【HashMap】
2.有序数组索引
3.跳表索引【redis-zset|zookeeper】
4.二叉树索引【Mysql B+树】

聚簇索引

主键索引的叶子节点存的整行数据。在InnoDB中主键索引也被称为聚簇索引。

非聚簇索引

非主键索引的叶子节点存的是主键的值。在InnoDB中非主键索引也被称为非聚簇索引。

最左匹配原则

当我们创建一个联合索引(key1,key2,key3),相当于创建了三个索引(key1)(key1,key2)(key1,key2,key3),这就是最左匹配原则。

B+树索引

B树的非叶子节点会存储卫星数据(整行数据)
B+树,只有叶子节点会存储卫星数据
B+树优点:
    1.单节点可以存储更多元素,使得查询磁盘IO次数减少
    2.所有查询都会到达叶子节点,查询性能更稳定
    3.所有叶子节点行程有序链表,便于范围查找
PS:在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。
在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。

普通索引

唯一索引

主键索引

主键索引就是一种特殊的唯一索引

联合索引

全文索引

FULLTEXT
回表
主键索引(聚簇索引)的叶子节点就是我们要查找的整行数据。
而非主键索引(非聚簇索引)的叶子节点是主键值,还需要再查询一次主键值,找到整行数据,这个过程就叫做回表。
覆盖索引
如果执行的语句是 select ID from T where k between 3 and 5,
这时只需要查 ID 的值,
而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,**不需要回表**。
也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。
explain: Usind index 就说明使用了覆盖索引
索引下推
对于user_table表,我们现在有(username,age)联合索引
如果现在有一个需求,查出名称中以“张”开头且年龄小于等于10的用户信息,
语句C如下:
"select * from user_table where username like '张%' and age > 10".

语句C有两种执行可能:
1、根据(username,age)联合索引查询所有满足名称以“张”开头的索引,然后回表查询出相应的全行数据,然后再筛选出满足年龄小于等于10的用户数据。
2、根据(username,age)联合索引查询所有满足名称以“张”开头的索引,然后直接再筛选出年龄小于等于10的索引,之后再回表查询全行数据。

明显的,第二种方式需要回表查询的全行数据比较少,这就是mysql的索引下推。
mysql默认启用索引下推,我们也可以通过修改系统变量optimizer_switch的index_condition_pushdown标志来控制

SET optimizer_switch = 'index_condition_pushdown=off';

注意点:
1、innodb引擎的表,索引下推只能用于二级索引。

就像之前提到的,innodb的主键索引树叶子结点上保存的是全行数据,所以这个时候索引下推并不会起到减少查询全行数据的效果。

2、索引下推一般可用于所求查询字段(select列)不是/不全是联合索引的字段,查询条件为多条件查询且查询条件子句(where/order by)字段全是联合索引。

***3、mysql 5.7引入索引下推。通知也会根据,非联合索引做优化,使用索引下推。
    注:执行计划中:Using index condition 就是使用了索引下推

假设表t有联合索引(a,b),下面语句可以使用索引下推提高效率
select * from t where a > 2 and b > 10;

相关文章

  • MySQL 索引分类

    MySQL索引的分类(根据数据结构) 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL...

  • MySQL部门培训-索引篇

    章节目录 MySQL索引学习路径 MySQL索引介绍 索引分类 索引建立技巧 小试牛刀-索引使用预判 explai...

  • 索引

    MySQL索引原理及慢查询优化 索引的储存分类: BTREE索引和HASH索引。MyISAM 和 InnoDB 存...

  • Mysql索引分类

    在绝大多数情况下,Mysql索引都是基于B+树的,而索引可以提高数据查询的效率。但是Mysql是如何利用B+树进行...

  • MySQL索引分类

    概述 本文主要介绍MySQL数据库的索引分类。由于不同的分类角度导致容易混淆。 按数据结构划分 hash索引MyS...

  • mysql索引分类

    常见的索引类型 聚簇索引 非聚簇索引 最左匹配原则 B+树索引 普通索引 唯一索引 主键索引 联合索引 全文索引 ...

  • MySQL索引分类

    存储结构:B-Tree索引、Hash索引、FULLTEXT全文索引、R-Tree索引应用层次:普通索引、唯一索引、...

  • MySQL高级之索引分析

    1 MySQL索引 1.1 简介 1.1.1 索引创建 点击了解索引创建,分类等相关知识[https://jing...

  • 字节跳动后端面经(11)

    MySQL索引数据结构、索引分类、联合索引、MySQL悲观锁和乐观锁怎么实现的 B+树、AVL、红黑树的原理 TC...

  • 索引问题

    1.索引存储分类索引是在MySQL的存储引擎层实现的,每个存储引擎的索引不一定相同。MySQL提供以下4种索引: ...

网友评论

      本文标题:mysql索引分类

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