sql优化:开发人员应该要细心

客户反映

运行某个报表要45秒以上

select id, role_id, login
                          from tb_user e
                         where role_id in (Select ID
                                  From tb_role f
                                  Connect By Prior Id = parent_id
                                 Start With Id = 1);

直接拿

以上语句到数据库上执行只要 2秒钟左右

那现在问题只能定位到开发人员写的程序

检查sql

select id, role_id, login
                          from tb_user e
                         where role_id in (Select ID
                                  From tb_role f

                                where e.role_id=f.id
                                  Connect By Prior Id = parent_id
                                 Start With Id = 1);

多了红色部分,去掉

再次运行恢复到2秒正常

以前该sql 是用exists 的写法

select id, role_id, login
                          from tb_user e
                         where exists  (Select ID
                                  From tb_role f

                                where e.role_id=f.id
                                  Connect By Prior Id = parent_id
                                 Start With Id = 1);

再改写成用in时开发人员忘记去掉红色代码部分导致执行时间过长

所以开发人员要细心,做为dba要更加严格审核sql才可提交出去

 

请使用浏览器的分享功能分享到微信等