在生产环境的日常监控中,一个非常简单的SQL引发了一个非常差的性能问题
这个SQL是在后台运行的,其功能是验证数据的唯一性
分析
这个SQL非常简单,简单到只有两个表
表中有exists,exists中又存在GROUP BY分组关键字
两个表的数据量都在35万左右
凭经验,瓶颈就在exists中的这个group by关键字
方案
将exists子查询改造成join 子查询
速度从1小时提升到1秒
心得
一个小小的exists,居然存在如此大的能量
不看执行计划也能完成优化
再次验证了exists是存在性能风险的
批判
回顾SQL需要实现的功能
首先判断du_node表中是否存在重复数据?
唯一性约束
其次判断这些重复数据是否都来自du表
参照性约束
无论是唯一性约束还是惨遭性约束,难道不能通过数据库的主外键、唯一键来约束吗?
总想通过程序来控制,而程序的复杂性又保障不了,因此又想到了事后监控
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/693533/viewspace-1985240/
,如需转载,请注明出处,否则将追究法律责任。