9_4、sql优化--select语句

一、group by优化

1、使用索引优化;

2、group by使用索引时,explain-extra值为Using index ,未使用索引或索引失效,explain-extra值为Using temporary 。

二、order by优化

1、使用索引优化;

2、order by使用索引时,explain-extra值为Using index ;未使用索引或索引失效,explain-extra值为Using filesort 。

在这里插入图片描述

三、 limit优化

1、使用索引优化

**当一个表中有几百万的数据的时候,**select * from table limit 0,10 这个sql语句性能没有问题 ,但当 limit 200000,10 的时候会出现问题:因为如上语句未使用索引,会扫描全表。

2、优化方式为:索引+连接查询,例如:

SELECT * 
FROM tb_sku t,
	(
		SELECT id
		FROM tb_sku
		ORDER BY id
		LIMIT 2000000,10) a
WHERE t.id = a.id;

四、count用法

count用法有:count(*)、count(主键)、count(字段)、count(1):

count用法含义
count(主键)InnoDB 引擎会遍历整张表,把每一行的 主键id 值都取出来进行累加(主键不可能为null)
count(字段)1、字段没有not null 约束 : InnoDB 引擎会遍历整张表把每一行的字段值都取出来,判断是否为null,不为null,计数累加。2、字段有not null 约束:InnoDB 引擎会遍历整张表把每一行的字段值都取出来,然后进行累加。
count(1)InnoDB 引擎遍历整张表,但不取值。而是对于返回的每一行,放一个数字“1”进去,然后累加
count(*)InnoDB引擎针对count(*)专门做了优化:遍历整张表,直接按行进行累加。

1、按照效率排序的话,count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽量使用count(1)或 count(*)。

2、count(1)或 count(*)直接按行累加,少了取值操作,所以效率最高;

3、count(字段)因为还有判空,所以效率最低

五、sql性能优化总结

1、crud的性能优化,主要是针对索引进行优化的

2、sql性能优化面试中常问,需要关注下

1、从开发者视角学习MYSQl系列文章:https://blog.csdn.net/maoxuemin/article/details/123523457;
2、快速问答:https://gitee.com/wendakuai/introducton/wikis/question

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值