暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

GaussDB 实操——数据库性能调优实验:语句优化6

最外层优化

  • 最外层为一个 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;
  • 此时执行时间为:

gaussdb0354.png

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

  • 执行结果如下

gaussdb0355.png

  • 查看执行计划:

gaussdb0356.png

gaussdb0357.png

  • 最终只剩 3 层。

至此本次的 SQL 优化操作结束,从原先的 2361ms 到最后的 647ms,整体 SQL 性能提升了70%。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论