項目中早些時間,有個oracle查詢語句寫的極其復雜,因為數據量小的關系,當時也並沒有怎么在意,回來隨着時間過去,客戶數據庫數量越來越大,那段語句的劣性就體現的非常明顯。優化時,發現查詢關系邏輯混亂又復雜(雖然數據查詢結果並沒有錯),多個類似的子查詢嵌套,導致查詢性能變的很低。
尋求資料知道ORACLE有個WITH as 用法及其好用
寫法大致如下:
WITH query1 AS
(select ...from ....where ..),
query2 AS
(select...from ...where..),
query3 AS
(select...from ...where..)
SELECT ...FROM query1,quer2,query3
where ....;
上述代碼,每一個逗號(必不可少)代表一段子查詢,觀察執行計划發現,執行時with as 中的子查詢結果會以臨時表的形式存在。
這樣寫每段子查詢相應的表僅會被檢索一次,不會像原來嵌套的一樣反復掃描相同的表,達到了“少讀的目的”,大大提高了數據分析以及查詢效率.