前段時間,做自動化適配的時候,查找需要的數據的時候,使用到了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
