1.使用age字段进行排序
由于age字段未加索引,查询结果按照age排序的时候发现使用了filesort , 排序性能较低 。
文章插图
给age字段添加索引,再次使用order by时就走了索引 。
文章插图
2.使用多字段进行排序
通常在实际业务中,参与排序的字段往往不只一个 , 这时候,就可以对参与排序的多个字段创建联合索引 。
如下根据stuno和age排序:
文章插图
给stuno和age添加联合索引:
create index idx_stuno_age on `student`(stuno,age);
再次分析时结果如下,此时排序走了索引:
文章插图
1)关于多字段排序时的注意事项
- 排序时,需要满足最左前缀法则,否则也会出现 filesort
文章插图
- 排序时,排序的类型保持一致
六、分组(group by)优化
group by 的优化策略和order by 的优化策略非常像,主要列举如下几个要点:
- group by 即使没有过滤条件用到索引 , 也可以直接使用索引;
- group by 先排序再分组,遵照索引建的最佳左前缀法则;
- 当无法使用索引列时,增大 max_length_for_sort_data 和 sort_buffer_size 参数的设置;
- where效率高于having,能写在where限定的条件就不要写在having中了;
- 减少使用order by,能不排序就不排序,或将排序放到程序去做 。Order by、groupby、distinct这些语句较为耗费CPU,数据库的CPU资源是极其宝贵的;
- 如果sql包含了order by、group by、distinct这些查询的语句 , where条件过滤出来的结果集请保持在1000行以内,否则SQL会很慢;
如果字段未加索引,分析结果如下,这种结果性能显然很低效 。
文章插图
给stuno添加索引之后:
文章插图
给stuno和age添加联合索引:
文章插图
如果不遵循最佳左前缀,group by 性能将会比较低效 。
文章插图
遵循最佳左前缀的情况如下:
文章插图
七、count 优化
count() 是一个聚合函数,对于返回的结果集 , 一行行判断,如果 count 函数的参数不是NULL,累计值就加 1 , 否则不加,最后返回累计值 。
用法:count(*)、count(主键)、count(字段)、count(数字)
如下列举了count的几种写法的详细说明:
文章插图
经验值总结:
按照效率排序来看,count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽量使用 count(*)
作者丨逆风飞翔的小叔
来源丨blog.csdn.NET/congge_study/article/details/127712927
【实用性极强的MySQL查询优化策略】
推荐阅读
- 《画眉》中的黑色终极内奸引发观众震惊
- 冯小刚徐帆为17岁女儿画展剪彩,善款全部捐献,小姑娘像极了爸爸
- 《八角笼中》获4项大奖,王宝强的“傻”,终于被拆穿了
- 曝徐志胜出演古装武侠男主?网友评价两极分化,直言怜爱搭戏女星
- 上影厂花旦陈鸿梅: 80年代红极一时,嫁普通高干子弟,如今怎么样
- 《极限挑战》重启,黄磊、黄渤、张艺兴,还有迪丽热巴的惊艳亮相
- 唐嫣实惨!星光大赏高定礼服被黑上热搜,粉丝比工作室还积极
- 揭秘!娱乐圈背后的权力游戏,王思聪与那英的终极对决!
- 从《雪中悍刀行》到《一念关山》,完全是两个极端,他的演技真好
- 北极星在哪个星座中,北极星和北斗七星相距有多远?