• MySQL优化01-索引


    本人理解,如若有误,欢迎指出。

    索引

    索引是帮助MySQL高效获取数据的排好序的数据结构。对于平时SQL语句的优化我这从索引开始,别的影响查询效率的比如,字段大小,合理的字段类型等,这里不做讨论。

    索引类型

    提示:这个网址,可以在线演示索引的插入情况:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

    二叉树

    在这里插入图片描述

    从图中可以看到,二叉树的机构,数的叶子节点左边的小于右边,如果我们插入的数据是递增的,那么这棵树就会一直往右增加,整棵树的高度就会不断的升高

    红黑树

    在这里插入图片描述

    从图中可以看到,红黑树保持了和二叉树的特点,叶子节点左边小于右边,但是它多了一个平衡,从而让数的高度不至于升高。
    提示:比较二叉树和红黑树查找节点5的数据,我们发现,二叉树需要查询5次,红黑树3次,查询速度就快了很多

    Hash表

    在这里插入图片描述

    很多时候 Hash 索引要比 B+ 树索引更高效;
    仅能满足“=”,“IN”,不支持范围查询;
    hash冲突问题;
    从图看出,只需要hash一次就可以快速定位数据的位置。但是存在hash冲突,导致hash链长。但是总体上说hash结构的索引查询效率还是很高的。

    B-Tree

    在这里插入图片描述

    叶节点具有相同的深度,叶节点的指针为空;
    所有索引元素不重复;
    节点中的数据索引从左到右递增排列;
    提示:对比二叉树,B-Tree也是一种特殊的二叉树。数据存储在索引上,同时由于相同高度存放的索引元素更多,查询效率更高

    B+Tree(B-Tree变种)

    在这里插入图片描述

    非叶子节点不存储 data ,只存储索引 ( 冗余 ) ,可以放更多的索引 ;
    叶子节点包含所有索引字段;
    叶子节点存在指针指向

    MySQL索引

    MySQL使用的是B+Tree索引。使用B+Tree索引的好处就是可以存储更多的索引 ,让数的高度下降,通时叶子几点存在指针指向,让查询效率更快。

    我们知道MySQL最常用的存储引擎就是Innodb和MyISAM,他们存数数据的时候底层是怎么存储的呢?

    MyISAM引擎

    在这里插入图片描述

    MyISAM索引文件和数据文件是分离的(非聚集),从图中可以看出使用的B+Tree的索引存储方式,叶子节点存放的是主键索引,查找数据的时候根据找到的主键,在回表一次查询得到最终的数据

    Innodb引擎

    在这里插入图片描述

    遍历主键索引的叶子节点最后就是得到我们需要的数据,所以Innodb的主键索引是聚集索引。 聚集索引叶节点包含了完整的数据记录

    联合索引

    在这里插入图片描述

    则是一个使用多个字段联合的索引底层数据存储结构,是联合主键索引,叶子节点包含了所有的表数据。

    了解了这些索引的数据结构后可以回答如下问题:

    为什么建议 InnoDB 表必须建主键,并且推荐使用整型的自增主键

    因为索引是有序的一种数据结构,使用整形,递增,这要在维护索引的时候就更好维护,我们在创建标的时候即使不创建主键,MySQL也会给我们生成主键,只是我们看不到是隐藏的,在创建表时候我们自己定义主键比MySQL自己维护主键效率会更高。

    为什么非主键索引结构叶子节点存储的是主键值

    在这里插入图片描述

    一致性和节省存储空间,回表查询

  • 相关阅读:
    3、云原生安全之falco的部署
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    基于变因子加权学习与邻代维度交叉策略的改进乌鸦算法求解单目标优化问题含Matlab代码
    算法竞赛进阶指南——链表学习笔记
    SpringBoot日志使用、记录日志文件
    Audio signals 音频信号
    Oracle数据库表空间数据删除以及数据库重启
    随机链表的复制
    mvn deploy tongweb-embed-7.0.E.5_P3 依赖上传
    Java集合框架【二容器(Collection)[ArrayList]】
  • 原文地址:https://blog.csdn.net/u012978914/article/details/133376491