日常记录——MySQL—sql执行过程、索引结构、索引类型

一、sql执行过程

在这里插入图片描述

二、索引结构

索引存储在磁盘,磁盘每次读取页的整数倍(4k一页),数据量大会造成多次IO,所以尽量在创建索引的时候,在同样大小情况下,存储更多的索引。
MySQL的索引结构为B+Tree:每个非叶子节点存储子节点磁盘指针和主键,存储更多的索引,降低IO次数,叶子节点存储磁盘指针和实际数据或者主键的值(InnoDB)或者数据的指针(MyISAM),并且叶子节点之间是链式环结构。即可满足随机查找和范围查找。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200728223444252.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzAwMTMzNg==,size_16,color_FFFFFF,t_70

为什么不使用其他结构:
1.hash表:散列结构,范围查找效率低。
在这里插入图片描述

2.二叉树:容易造成单链表结构,效率反而降低。
在这里插入图片描述

3.平衡二叉树:最高子树和最低子树高度不能超过1,插入数据效率低,为了平衡,会进行旋转操作。
在这里插入图片描述
4.红黑树:最高子树和最低子树高度不能大于2倍,平衡二叉树的升级,插入速度优化,但树高度不可控,增加磁盘IO次数,降低效率。
5.B-树:数据和内存地址存放一起,数据大小无法确定,数据过大造成,会增加树的深度,增加磁盘IO次数,降低性能。
在这里插入图片描述

三、索引类型

1.主键索引:类型为主键的唯一索引,每个表只有一个。最好设置主键自增,防止页分裂、合并降低效率。
2.唯一索引:索引列值只可以出现一次,可以有null。
3.普通索引:加速查询,可以有null。
4.覆盖索引:非主键索引存储的是主键的值,拿到主键值后再去主键索引查询数据,如果一个sql只需要查询主键列数据,则会产生覆盖索引。
5.全文索引:MyISAM支持,5.6后InnoDB也支持,对文本的内容(varchar,char,text)进行分词,进行搜索。
6.前缀索引:索引开始的部分字符,字符串过长会造成索引慢且文件大。
7.组合索引:多列值组成一个索引,用于组合搜索,遵循最左匹配原则。
*索引下推:回表前根据条件进行筛选主键值

猜你喜欢

转载自blog.csdn.net/weixin_43001336/article/details/107644124
今日推荐