当前位置: 首页 > news >正文

MySQL:SQL优化实际案例解析(持续更新)

文章目录

  • 一、MySQL:SQL优化
    • 1、时间格式化问题(字符串)
    • 2、in/inner join的问题

一、MySQL:SQL优化

1、时间格式化问题(字符串)

-- 优化前
SELECT
*
FROM
test_table
WHERE date_format( begin_time, '%Y-%m-%d' ) = '2025-03-12'

-- 优化:
-- 1、加上begin_time字段为普通索引,并且优化了sql
SELECT
*
FROM
test_table
WHERE begin_time between concat('2025-03-12', ' 00:00:00') and concat('2025-03-12', ' 23:59:59')

原理解释:
在where条件中对字段进行函数操作,即使加了索引也会导致索引失效,最终是走全表扫描!
如果使用between,全表扫描会变成范围搜索,索引就会正常使用了!

如果是mysql8版本,可以考虑使用函数索引

2、in/inner join的问题

-- 优化前
SELECT
*
FROM
test_table
WHERE
id IN (
        SELECT
            max( id )
        FROM
            test_table
        GROUP BY
            DATE_FORMAT( begin_time, '%H时' )
    )
-- 优化后
SELECT
*
FROM
test_table t1
inner join (
        SELECT
            max( id ) id
        FROM
            test_table
        GROUP BY
            DATE_FORMAT( begin_time, '%H时' )
    ) t2 on t1.id = t2.id

原理解释:
mysql5版本,对于in并不是很友好,in参数过多就会走全表扫描。而8版本对in做了优化。
如果用的是mysql5版本,in的过程比较慢,或许尝试用join操作来代替in可能会有奇效!
同时,看情况用exists等能够替代in的方式。

相关文章:

  • JDK8和JDK17 Thread.interrupt() 实现区别
  • 软件综合实践微人事管理信息系统+燃气站信息管理系统+mapbox地图(实际上使用的高德地图开发)
  • 深度学习GRU模型原理
  • 【Academy】服务器端模板注入 ------ Server-side template injection
  • k8s面经
  • Elasticsearch-07-Elasticsearch Java API Client-Elasticsearch 8.0 的高阶api
  • Jmeter 测试一个网站的并发量
  • PHP 在 if 判断时由于运算符优先级导致 false 的问题
  • 【具身相关】legged_gym, isaacgym、rsl_rl关系梳理
  • Qt表格美化笔记
  • 华为OD机试-求字符串中所有整数的最小和-逻辑分析(Java 2023 B卷 100分)
  • AGI大模型(2):GPT:Generative Pre-trained Transformer
  • 【Godot4.3】RenderingServer总结
  • 安装 MongoDB 的步骤(Windows / macOS / Linux)
  • 联合中存储平方差
  • FPGA 实现 OV5640 摄像头视频图像显示
  • 【spring】springAOP
  • navicat16 升级到 navicat17 之后原来的连接找不到了 mac用户
  • 侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)
  • 利用8个参数定义一个汽轮机,然后根据这8个参数生成汽轮机性能试验时的测点清单-pycharm-源代码(适用所有类型汽轮机)
  • 央媒:安徽凤阳鼓楼坍塌楼宇部分非文物,系违规复建的“假古董”
  • 上海普陀:探索1岁以下托育服务的保育内容、人员配备等关键要素
  • 中国首次当选联合国教科文组织1970年《公约》缔约国大会主席国
  • 安徽凤阳县明中都鼓楼楼宇顶部瓦片部分脱落,无人员伤亡
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 德州国资欲退出三东筑工,后者大股东系当地房企东海集团