最外层优化
- 最外层为一个 GROUP BY 和一个 order by 语句,可以考虑结合一起来执行。
SELECT dept_name, COUNT(dept_name) AS num
, SUM(COUNT(dept_name)) OVER () AS total
, round(COUNT(dept_name) / SUM(COUNT(dept_name)) OVER () * 100, 2) AS percent
FROM departments a
STRAIGHT_JOIN (
SELECT emp_no, dept_no
FROM dept_emp FORCE INDEX (index_date)
WHERE from_date <= '2020-10-01'
AND to_date >= '2020-10-01'
) b
ON a.dept_no = b.dept_no
JOIN (
SELECT emp_no
FROM employees
WHERE date_format(birth_date, '%m') = '10'
) c
ON b.emp_no = c.emp_no
GROUP BY dept_name
ORDER BY COUNT(dept_name) DESC;
- 此时执行时间为:

性能并未提升太多,因为 count 函数计算了 5 次(SQL 语法中 count 函数执行了 5 次),原先的 SQL 语法 count 函数只计算了一次。
- 执行结果如下

- 查看执行计划:


- 最终只剩 3 层。
至此本次的 SQL 优化操作结束,从原先的 2361ms 到最后的 647ms,整体 SQL 性能提升了70%。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




