专栏名称: AustinDatabases
PostgreSQL ACE ,PolarDB 3年, OceanBase 极速学习ING, MongoDB 8年经验, MySQL OCP, SQL SERVER, MCITP,REDIS ,做一个合格的数据库架构师
目录
相关文章推荐
51好读  ›  专栏  ›  AustinDatabases

MySQL 8 SQL 优化两则 ---常见问题

AustinDatabases  · 公众号  · 数据库 科技媒体  · 2025-05-20 06:00

主要观点总结

文章主要介绍了SQL语句优化的关键点和步骤,以及对于数据库管理和使用的思考。首先,文章从SQL语句的角度分析了优化方法,包括合并同类项和避免不必要的改写。接着,通过具体的SQL查询案例,展示了优化前后的执行计划,并解释了优化的效果。文章还探讨了数据库代理的功能,强调了索引的重要性,并提到了架构师和DBA之间的沟通。此外,文章还提及了其他数据库产品,如OceanBase和MongoDB,并提供了相关的学习资源。最后,文章通过不同的主题,展示了数据库领域的丰富知识和实际应用。

关键观点总结

关键观点1: SQL语句优化

文章讨论了SQL语句优化的关键点和步骤,包括合并同类项和避免不必要的改写,以及执行计划的变化和效果。

关键观点2: 数据库代理和索引

文章强调了数据库代理的功能,并讨论了索引在数据库管理中的重要性,以及如何与架构师沟通以提高效率。

关键观点3: OceanBase和MongoDB

文章提到了其他数据库产品,如OceanBase和MongoDB,并提供了相关的学习资源,展示了数据库领域的多样性和应用。

关键观点4: 数据库知识与应用

文章通过不同的主题,如数据库架构、ETL云化、SQLSERVER维保AI化等,展示了数据库领域的丰富知识和实际应用,强调了数据库在现代技术中的核心地位。


正文

请到「今天看啥」查看全文


'' ) AS demandtime,
COALESCE(do.needpurpose, '' ) AS needpurpose,
COALESCE(do.questiontype, '' ) AS questiontype,
COALESCE(do.questiongrade, '' ) AS questiongrade,
do.grademsg,
do.dept_name,
do.dept,
do.type,
COALESCE(DATE_FORMAT(do.schedule_month, '%Y-%m-%d %H:%i:%s' ), '' ) AS schedule_month,
CASE
WHEN do.is_customized = 1 THEN '是'
ELSE '否'
END AS is_customized,
COALESCE(do.cloud_examiner, '' ) AS cloudExaminer,
COALESCE(DATE_FORMAT(do.cloud_gmt_examiner, '%Y-%m-%d %H:%i:%s' ), '' ) AS cloud_gmt_examiner,
COALESCE(do.cloud_reviewer, '' ) AS cloud_reviewer,
COALESCE(DATE_FORMAT(do.cloud_gmt_reviewer, '%Y-%m-%d %H:%i:%s' ), '' ) AS cloud_gmt_reviewer,
COALESCE(do.cloud_pm, '' ) AS cloud_pm,
COALESCE(DATE_FORMAT(do.cloud_gmt_pm, '%Y-%m-%d %H:%i:%s' ), '' ) AS cloud_gmt_pm,
d1.dept_name AS firstDeptName,
d2.dept_name AS secondDeptName,
p.name AS project,
do.curator,
u3.nickname AS curatorName,
COALESCE(DATE_FORMAT(do.pm_start_time, '%Y-%m-%d %H:%i:%s' ), '' ) AS pmStartTime,
TIME_FORMAT(TIMEDIFF(do.pm_end_time, do.pm_start_time), '%H小时 %i分钟' ) AS communicateTime
FROM
demand_order do
JOIN
users_user u ON do.actor_id = u.id
LEFT JOIN
department d1 ON u.firstDept = d1.wx_code
LEFT JOIN
department d2 ON u.secondDept = d2.wx_code
LEFT JOIN
users_user u2 ON do.product_manager = u2.id
LEFT JOIN
users_user u3 ON do.curator = u3.username
left join
project p on p.id = do.project
WHERE createdDate BETWEEN '2025-03-29 00:00:00' AND '2025-04-28 23:59:59' AND  do.is_deleted=0;

这个SQL一看就有两处的毛病

1  createDate 没有写前缀,这样运行没有问题但是会在前期执行会进行判断,一般我们都要标清到底是哪个表的createdate

2  is_deleted 应该 上移,上移到 demand_order的表有关的 left join 的条件上,这样更早的过滤数据,尽量不要等数据都查询完毕后,在进行过滤。当然在部分情况无法进行,主要还是业务逻辑的问题,这就牵扯到第二个问题,如果确定业务逻辑是inner join的,就尽量不要写成left join。也能提高SQLQ运行效率。

另外这个SQL缺少索引,如 department 的 wx_code, users_user的 username, 以及demand_order 的createdDate ,在加完这些索引后,整体的查询变得有效且快速。

加完索引的执行计划
加完索引的执行计划
如果您觉得这篇文章还可以,投上您珍贵的10票,不胜欣喜!!!
https://zt.itpub.net/topic/peanit/list.html?id=307635

哈呀站,OB广州开发者大会 之 “五” 眼联盟

三段 DBA 的小故事,过去的不会在来,未来的还不曾遇到

现代数据库的必要组件--数据库代理都能做什么

和架构师沟通那种“一坨”的系统,推荐只能是OceanBase,Why ?

DBA 怎么变得更强-应对架构师提出高并发问题?

鸿门宴讲PostgreSQL --  被拉去央企救场一天
美国知名大学开授China数据库理论,你没看错!
DBA 会架构,实际案例分析--“IT流氓”得下跪
搞 PostgreSQL多才多艺的人--赵渝强 《PG数据库实战派》
追逐太阳的男人--林春 《金融数据库转型实战》
打破DBA局限:像架构师一样思考,提升你的技术价值-- 访蚂蚁金服P9 朱春茂

OceanBase 相关文章
哈呀站,OB广州开发者大会 之 “五” 眼联盟
OceanBase 单机版可以大批量快速部署吗? YES
OceanBase 6大学习法--OBCA视频学习总结第六章
OceanBase 6大学习法--OBCA视频学习总结第五章--索引与表设计
OceanBase 6大学习法--OBCA视频学习总结第五章--开发与库表设计
OceanBase 6大学习法--OBCA视频学习总结第四章 --数据库安装
OceanBase 6大学习法--OBCA视频学习总结第三章--数据库引擎
OceanBase 架构学习--OB上手视频学习总结第二章 (OBCA)
OceanBase 6大学习法--OB上手视频学习总结第一章
没有谁是垮掉的一代--记 第四届 OceanBase 数据库大赛






请到「今天看啥」查看全文