索引调优的一点基础知识

文章详细介绍了MySQL中的索引类型,如B+树在InnoDB和MyISAM引擎中的应用,以及如何通过索引优化查询性能。提到的关键点包括覆盖索引、最左匹配原则、索引下推和避免回表操作。此外,还强调了查询优化技巧,如使用主键查询、避免表达式和类型转换,以及限制联表查询的数量。

索引是什么

请添加图片描述

请添加图片描述

通过 show profile for query 1;
可以查看该查询语句执行的整个过程,则我们就能分析出那部分是需要优化的

索引是帮助Mysql高效获取数据的数据结构
索引存储在文件系统中
索引的文件存储形式与存储引擎有关
索引文件的结构
hash 范围查找不方便
二叉树 深度过深,造成io次数变长
B树
B+树

Mysql用B+树

用InnoDB引擎 用B+树建立索引的规则

1、当用主键创建索引时(有主键时mysql会自动会主键创建索引),叶子节点直接存储记录,如果没有主键则选择唯一键,如果没有唯一键则会生成6位的row_id来作为主键
2、当用其他字段创建索引时,会进行两次B+的寻找,第一次B+树叶子节点存放的是该记录的主键,然后通过找到的主键再去另一个B+树中寻找,这个B+的叶子节点存放的就是记录了。

用MyISAM引擎 用B+树建立索引的规则

B+树的叶子节点存储的是磁盘地址,找到后需要访存一次找到记录

通过索引进行调优

索引的基本知识

1、大大减少了服务器需要扫描的数据量
2、帮助服务器避免排序和临时表
3、将随机IO变成顺序IO

索引的用处

加快我们的数据访问

回表

就是用不是主键的列建立了普通索引,普通索引的b+树的叶子节点存储的不是记录,而是主键的值,这时候就需要回表,回到由主键建立的B+树,这是叶子节点才是存储的记录。

覆盖索引

就是当用普通索引查找时,且只查找id(主键),则不用回表一次即可查到

select * from table1 where name='zhangsan'
select id from table1 where name='zhangsan'(此时就是覆盖索引)

最左匹配

在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。

索引下推

只有组合索引时,才有下推
例如 where 关于 name 和 age
正常按最左匹配,先找到符合name的数据放入到mysql的server层中
再到server层按照age进行数据过滤

下推后
直接从存储引擎拉去数据的时候直接按照name和age做判断,符合的结果返回给mysqlserver

哈希索引

用链表法的那个就是哈希表,只有memory的存储引擎显示支持哈希索引

聚簇索引 与 非聚簇索引

聚簇索引(InoDB是聚簇)就是数据文件跟索引文件紧凑在一起存放,
而非聚簇索引则相反

优化小细节(重点)

1、当使用索引进行查询时,尽量不要用表达式,计算应发到业务层而不是数据库层
2、尽量使用主键查询而不是其他索引,主键索引不会回表
3、使用索引来排序
4、union all in or 推荐使用in
5、范围列可以用到索引
6、强制类型转换会全表扫描
7、更新频繁,区分度不高的字段不建议当作索引
8、能使用limit就用limit
9、连表查询最好不超过3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值