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

简介: 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语句是否用到索引,有没有导致索引失效等问题,再去向指定列添加索引,就可以了。

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

目录
相关文章
|
12天前
|
SQL 存储 关系型数据库
SQL优化之Explain详解(mysql)
`Explain`是MySQL中用于分析SQL查询执行计划的工具。它可以帮助我们了解MySQL如何执行SQL语句,包括如何使用索引、预计的行数以及查询的顺序。以下是`Explain`输出的关键列及其含义的简要摘要: 1. **id**:查询的序列号,表示查询中的子句层次,id越大优先级越高。 2. **select_type**:表示查询的类型,如SIMPLE(简单查询)、PRIMARY(主查询,多表查询中的第一个查询)、SUBQUERY(子查询)、DERIVED(派生表)或UNION(UNION操作的查询部分)。 3. **table**:查询涉及的表名,如果是子查询,可能显示为衍生表
37 0
|
12天前
|
SQL 存储 弹性计算
GaussDB SQL调优:建立合适的索引
GaussDB SQL调优:建立合适的索引
19 0
|
12天前
|
SQL 关系型数据库 MySQL
MYSQL-SQL语句性能优化策略以及面试题
MYSQL-SQL语句性能优化策略以及面试题
36 1
|
1天前
|
SQL 数据采集 监控
14个Flink SQL性能优化实践分享
本文档详细列举了Apache Flink SQL的性能调优策略。主要关注点包括:增加数据源读取并行度、优化状态管理(如使用RocksDB状态后端并设置清理策略)、调整窗口操作以减少延迟、避免类型转换和不合理的JOIN操作、使用广播JOIN、注意SQL查询复杂度、控制并发度和资源调度、自定义源码实现、执行计划分析、异常检测与恢复、监控报警、数据预处理与清洗、利用高级特性(如容器化部署和UDF)以及数据压缩与序列化。此外,文档还强调了任务并行化、网络传输优化、系统配置调优、数据倾斜处理和任务调度策略。通过这些方法,可以有效解决性能问题,提升Flink SQL的运行效率。
|
4天前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
28 2
|
5天前
|
SQL 资源调度 监控
Flink SQL性能优化实践
Apache Flink流处理性能优化指南:探索数据源读取并行度、状态管理、窗口操作的优化策略,包括设置默认并行度、使用RocksDB状态后端、调整窗口大小。调优方法涉及数据源分区、JOIN条件优化、使用Broadcast JOIN。注意SQL复杂度、并发控制与资源调度,如启用动态资源分配。源码层面优化自定义Source和Sink,利用执行计划分析性能瓶颈。异常检测与恢复通过启用检查点,监控任务性能。预处理数据、使用DISTINCT去重,结合UDF提高效率。选择高效序列化框架和启用数据压缩,优化网络传输和系统配置。处理数据倾斜,均衡数据分布,动态调整资源和任务优先级,以提升整体性能。
36 2
|
6天前
|
SQL 关系型数据库 MySQL
sql性能优化及实战
sql性能优化及实战
13 0
|
12天前
|
SQL 前端开发 索引
sql 性能优化基于explain调优
sql 性能优化基于explain调优
22 0
|
12天前
|
SQL 关系型数据库 MySQL
explain是什么?explain优缺点及如何使用explain优化SQL
explain是什么?explain优缺点及如何使用explain优化SQL
47 1
|
12天前
|
SQL 关系型数据库 MySQL
干货!SQL性能优化,书写高质量SQL语句
干货!SQL性能优化,书写高质量SQL语句
37 2