mysql 5.7 sql优化,跟传统sql优化区别很大,解决老版本sql优化的各种问题。修正sql优化的错误。

网上流传的各种版本的sql优化都已经过时了。
测试环境,一句mysql官方5.7版本,配合200w数据测试得出如下结论。

1、慎用like语句
	(1)、where name like '%Jack'  索引失效
	(2)、where name like 'Jack%'  索引生效
	(3)、where name like '%Jack%'  索引失效
	如果like 后面%在语句前面会导致索引失效
2、复合索引(纠错)
	网上大部分论坛中的博客都是错误的。
	user表中有如下字段,username,password,schoolname,给user表建立复合索引
	create index index_name on user(username,password,schoolname);
	查询语句:
	select * from user where username='zs' and password='zs' and schoolname='yet' 索引生效
	select * from user where username='zs' and password='zs' 索引生效
	select * from user where username='zs' and schoolname='yet' username索引生效,schoolname索引不生效
	select * from user where password='zs' and schoolname='yet' 索引不生效
	select * from user where password='zs' and username='zs' and schoolname='yet' 索引生效****
	select * from user where schoolname='yet' and username='zs' and password='zs' 索引生效****
	
3、or慎用
	or两侧的语句,如果有一侧没有索引,那么整个语句不走索引,但是如果两侧都有索引,这时候是走索引的。
	
4、is null ,is not null
     目前版本已经可以走索引了,面试题答案有问题了

5、in 
	目前版本已经可以走索引了,面试题答案有问题了,不在需要使用between和exsit替换了
	not in 不走索引

6、where子句中应尽量避免对索引字段操作(表达式操作或函数操作),比如select id from test where num/2 = 100应改为num = 200。

7、在使用复合索引时,查询时必须使用到索引的第一个字段,否则索引失效;并且应尽量让字段顺序与索引顺序一致。

8、查询时必须使用正确的数据类型。数据库包含了自动了类型转换,比如纯数字赋值给字符串字段时可以被自动转换,但如果查询时不加引号查询,会导致引擎忽略索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值