sql 性能优化基于explain调优(二)

Explain

关于Explain具体怎么用以及有哪些优点,我就不过多的跟大家去讲解了,从我最初的文章: explain是什么?explain优缺点及如何使用explain优化SQL,大家可以点击这个链接看一下,对Explain有个基础的了解,前段时间我发表的博客文章sql 性能优化基于explain调优,讲述的时在实战当中,当我们拿到SQL语句,查询几秒甚至10及秒时,如何进行优化为几毫秒

回到正题,今天这边文章还是围绕使用Explain对SQL的性能调优问题,可见认识到了Explain的重要性了吧,此案例呢为实战案例,也是我在项目中遇到的SQL性能调优问题

问题描述

先来看下需要进行优化的SQL语句

  SELECT
        m.`name` AS memberId_dictText,
        o.type AS type_dictText,
         i.`name` AS taskId_dictText,
        o.number AS number,
        o.create_time AS createTime,
        g.`name` AS goodsId_dictText,
        o.`code`,
        o.is_make AS isMake,
        o.end_time AS endTime
        FROM
        sg_operation_records o
        LEFT JOIN sg_member m ON o.member_id = m.id
         LEFT JOIN sys_user u ON m.doctor_id = u.id
         LEFT JOIN sg_item i ON i.id = o.task_id
         LEFT JOIN sg_goods g ON goods_id = o.goods_id
         AND g.sys_org_code = m.sys_org_code
        WHERE 1 = 1
--             AND o.type = #{recordType}
--                 AND g.is_on_sale = 1
--                 AND g.is_delete = 0
--             AND u.id = #{doctorId}
            AND m.sys_org_code = 'A02A01'
--             AND m.name like  CONCAT('%', #{name},'%')

前端查询时报了一个这样的错误在这里插入图片描述

解决方案

这个错误很明显是前端调用后端,由于长时间没收到后端的回复,超时了,我的解决思路是,打下断点,看看是后端报错了吗,跑了一下程序,后端是没有问题的,然后我的目光转向了XML文件里的SQL,在数据里执行了一下SQL语句,查询时间为2秒多
在这里插入图片描述
回到SQL语句中查看这是一个五个表连接查询的SQL语句,主表为sg_operation_recordssg_operation_records表的外键关联为member_idgoods_id这两列,向这两列添加复合索引

create index key_operation_records on sg_operation_records(member_id,goods_id)

查看及添加索引语法(以复合索引为例)

//添加索引
create index 索引名称 on 表名(列名,列名)
// 查看索引
show index from 表名

此时已经给sg_operation_records表中的这两列加上了复合索引
在这里插入图片描述
再来执行一下SQL语句,3毫秒SQL语句没有变,只是给列加了索引
在这里插入图片描述
总结
在SQL性能调优时,在SQL语句select前面加上Explain关键字,怎么分析,在我本文的开头提到过来,在本博主的上一篇文章中有详细讲解,根据Explain去分析当前SQL语句是否用到索引,有没有导致索引失效等问题,再去向指定列添加索引,就可以了。

本次技术分享到此结束,有不明白或者疑问的博主,可以私信我哦 ~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值