分享一篇:sql語句中使用子查詢,可能會引起查詢的性能問題,查詢時間會變長


前段時間,做自動化適配的時候,查找需要的數據的時候,使用到了dblink,跨數據庫實例進行訪問,整段sql拼接再加上dblink,在plsql查詢的時候,性能還不是很長時間,最多2分鍾可以查到,前期調試階段,在plsql里面調,沒有留意到這個性能問題,后期,投入自動化使用的時候,就出現問題了,一個腳本,查找需要數據的方法,耗時長達10分鍾。

原始版本設計:

查找需要數據的原有sql進行拼接篩選

如:

select * from student t ,class b where t.studentNo=b.studentNo ....中間省略其他很多過濾的sql

and t.studentNo not in (select c.studentNo from scort c where c.sort>'90') --中間使用的子查詢

 

分析耗時長的原因:

  1.使用plsql查詢,速度還是可以接受的(使用到索引),使用自動化框架,怎么就變慢了  -- 原因是jdbc框架,沒有使用索引來查找

  2.優化:先創建一個臨時表,然后再創建關聯

 

優化之后的sql

WITH sort_a AS (select c.studentNo from scort c where c.sort>'90')

select * from student t ,class b,sort_a d where t.studentNo=b.studentNo and t.studentNo=d.studentNo

 

備注:可能做開發的同事,比較清楚,一般查詢里面,都不建議在sql語句里面加很多的子查詢,一般會建立臨時表等的去過濾

 

with xx as的作用:https://www.cnblogs.com/mingforyou/p/8295239.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM