Mysql-索引的优化

本文探讨了MySQL索引优化的各种策略,包括避免回表操作、实现索引覆盖、利用最左匹配原则、理解索引下推和谓词下推的概念。同时,提到了聚簇和非聚簇索引的区别,并给出了优化细节,如避免索引列的表达式计算、利用主键查询、使用前缀索引、限制组合索引的数量等。此外,还列举了索引可能不被使用的几种情况,如函数运算、模糊查询和OR语句等。
摘要由CSDN通过智能技术生成

索引的优化

回表:在innodb从其他字段索引查到主键,在回主索引那张表上面去找到记录的内容

索引覆盖:不需要回表的索引查找就叫做索引覆盖

最左匹配:只要查询条件的列中包含组合索引最左边的那一列,不管该列在查询条件中的位置,都会使用索引进行查询

索引下推:
例子:(name,age)
1.先根据name列从存储引擎中把符合规则的数据拉去到mysql的server层
2.在server层按照age进行数据过滤

1.直接从存储引擎拉取数据的时候直接按照name和age做判断,将符合的结果返回给mysql server
这里的第二种就是索引下推(IO量不同)

谓词下推:
例子:select t1.name,t2.name from t1 join t2 on t1.id=t2.id;
1.把所有的字段先做表关联,然后再从关联好的表中选择需要的4个字段
2.先把两张表需要的4个字段取出,然后在做表关联
谓词下推就是第二种

聚簇索引:不是单独的索引类型,而是一种数据存储方式,数据和索引是一体的
非聚簇索引:索引跟数据分开来存的 MYD是数据文件 MYI是索引文件

优化细节
1.当使用索引列进行查询的时候尽量不要使用表达式,把计算放到业务层而不是数据层
2.尽量使用主键查询 因为不用回表(IO问题)
3.使用前缀索引 例子left(city,7)
4.使用索引扫描来排序
5.范围列可以用列索引 范围条件是<、<= > >= between
范围列可以用到索引你,但是范围列后面的列无法用到索引&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值