Java基础语法教学视频,MySql知识体系总结(SQL优化篇

这篇博客探讨了MySQL的联合索引优化,强调了索引顺序的重要性,并提供了删除、添加和调整索引顺序的实例。内容涵盖单表SQL优化,如避免IN操作和优化ORDER BY,以及双表SQL优化,包括建表语句和慢查询日志的配置与分析。还讲解了锁机制在多会话查询和修改操作中的应用。
摘要由CSDN通过智能技术生成

备注:因为mysql优化器的缘故,与索引顺序不一致,也会触发索引,但实际项目中尽量顺序一致。

5、联合索引,但其中一个条件是 >

6、联合索引,order by

where和order by一起使用时,不要跨索引列使用。

三、单表sql优化


1、删除student表中的联合索引。

2、添加索引


alter table student add index student_union_index(name,age,sex);

优化一点,但效果不是很好,因为type是index类型,extra中依然存在using where。

3、更改索引顺序

因为sql的编写过程


select distinct ... from ... join ... on ... where ... group by ... having ... order by ... limit ...

解析过程


from ... on ... join ... where ... group by ... having ... select distinct ... order by ... limit ...

因此我怀疑是联合索引建的顺序问题,导致触发索引的效果不好。are you sure?试一下就知道了。


alter table student add index student_union_index2(age,sex,name);

删除旧的不用的索引:


drop index student_union_index on student

索引改名


ALTER TABLE student RENAME INDEX student_union_index2 TO student_union_index

更改索引顺序之后,发现type级别发生了变化,由index变为了range。

range:只检索给定范围的行,使用一个索引来选择行。

备注:in会导致索引失效,所以触发using where,进而导致回表查询。

4、去掉in

ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取;

index 提升为ref了,优化到此结束。

5、小结

  1. 保持索引的定义和使用顺序一致性;

  2. 索引需要逐步优化,不要总想着一口吃成胖子;

  3. 将含in的范围查询,放到where条件的最后,防止索引失效;

四、双表sql优化


1、建表语句


CREATE TABLE `student` (

  `id` int(10) NOT NULL,

  `name` varchar(20) NOT NULL,

  `age` int(10) NOT NULL,

  `sex` int(11) DEFAULT NULL,

  `address`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值