案例02-sql语句的优化

简介: sql语句的优化

一:背景介绍

       前端调用后端接口的时候发现接口的响应时间特别长,然后对后端接口进行分析。最后发现是sql语句的执行时间太长。看了一下sql语句的相关信息:course_id字段和class_id字段添加了索引,左连接两个表的id类型不一致,使用分组的方式进行去重。下面对sql语句进行分析

1087c7a4f89447479d198f09c580feee.png

二:思路&方案

       1.sql语句各部分的执行顺序。

       2.明确distinct和group by的差异。

       3.查看sql语句是否已经添加了索引,索引是否失效。

三:过程

sql语句各部分的执行顺序

1.from
2.on
3.join
4.where
5.group by
6.having + 聚合函数
7.select
8.distinct
9.order by
10.limit

93aa6983f8c64acda4758810422c3e05.png

以上sql语句的执行顺序为3->4->5->2->6->1

明确distinct和group by的差异

1.有索引的情况下,group by和distinct 都能用索引,效率相同

2.无索引的时候,distinct 效率高于 group by,distinct 是根据信息不同进行直接进行去重,group by 的原理是对结果先进行 分组排序 ,然后返回每组中的第一条数据。

3.如果是单纯的去重操作的话,无论是否有索引,distinct 的效率都更加高,但是如果 查询的列和去重的列不对应的话,distinct就无法使用了。相较于group by 不够灵活。

4.group by 的语义更加的明确,并且group by 可以根据分组的情况加上聚合函数,做一些其他的处理,功能更加丰富。但是有时候效率将低于distinct。

5.distinct用法

select distinct 列1 , 列2 from table

group by用法

select 列1,列2 from table group by 列1 ,列2

验证数据类型不一致是否会影响索引

1.数据类型不一致

sql语句

SELECT
  aui.ding_phone,
  aui.ding_name,
  aui.chaoxing_name,
  aui.chaoxing_phone 
FROM
  ( SELECT info_id FROM arpro_user_course_info WHERE course_id = 223667994 AND class_id = 55801765 AND is_delete = 0 GROUP BY info_id ) auci
  LEFT JOIN arpro_user_info aui ON auci.info_id = aui.id

表字段数据类型

7e8f6936a6f14663a7b3e977d12a42fb.png

7e9858d547e441709cd59ef24551bda1.png

创建的索引

99da0313b34f44e98085bd132bf3fb13.png

执行结果:主键索引没有生效

5d2b3bc98bb444b1af69888675216514.png

2.数据类型一致

将数据类型调整为bigint

将group调整为distinct

SELECT
  aui.ding_phone,
  aui.ding_name,
  aui.chaoxing_name,
  aui.chaoxing_phone 
FROM
  ( SELECT DISTINCT info_id FROM arpro_user_course_info WHERE course_id = 223667994 AND class_id = 55801765 AND is_delete = 0 ) auci
  LEFT JOIN arpro_user_info aui ON auci.info_id = aui.id

执行结果5c73999078304d4b86767c1252c2bd2b.png

四:优化的好处

  1. 提高查询性能:优化SQL语句可以减少查询的执行时间和资源消耗,提高系统的响应速度和吞吐量。通过使用合适的索引、优化查询计划和减少不必要的数据读取,可以有效地提高查询的性能。
  2. 减少系统负载:优化SQL语句可以减少系统的负载,提高系统的稳定性和可靠性。通过减少不必要的数据库访问、优化查询语句的效率和减少数据传输量,可以降低系统的资源消耗,减少数据库的负载。
  3. 提高用户体验:优化SQL语句可以提高用户的体验和满意度。快速响应的查询结果可以让用户更好地享受系统的功能,提高用户的工作效率和满意度。同时,优化SQL语句还可以降低系统的错误率和异常情况,提高系统的可用性和稳定性。
  4. 节省成本:优化SQL语句可以节省系统的资源和成本。通过减少不必要的数据库操作和优化查询语句的效率,可以降低数据库的存储和计算成本。同时,优化SQL语句还可以减少系统的维护和运维成本,提高系统的可维护性和可扩展性。
  5. 改善系统的可扩展性:优化SQL语句可以改善系统的可扩展性和性能扩展能力。通过优化查询语句的效率和减少数据传输量,可以降低系统的资源消耗,提高系统的性能和扩展能力。这有助于系统在面对大量用户和数据时仍然能够保持高性能和稳定性。

五:总结

       明确sql语句的执行顺序有助于我们对于sql语句进行优化。提高我们对数据库和sql语句的理解。来编写效率更高的语句。

       优化SQL语句可以提高查询性能、减少系统负载、提高用户体验、节省成本和改善系统的可扩展性。这些好处有助于提高系统的性能、稳定性和可用性,提升用户的满意度和系统的价值。



相关文章
|
13天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
22天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
1月前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
96 11
|
3月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
3月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
3月前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
3月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
89 0
|
3月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
225 3
|
3月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)