程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle SQL的優化的規則描述

Oracle SQL的優化的規則描述

編輯:Oracle數據庫基礎

Oracle SQL的優化的規則中我們最好少用IN操作符,因為一般的IN操作符都是可以用EXISTS來代替,我們都知道用IN寫出的SQL的話,它的優點就是比較容易寫及清晰易懂,但是用IN的SQL性能總是比較低的,從Oracle執行的步驟來分析用IN的SQL與不用IN的SQL有以下區別:

ORACLE 試圖將其轉換成多個表的連接,如果轉換不成功則先執行IN裡面的子查詢,再查詢外層的表記錄,如果轉換成功則直接采用多個表的連接方式查詢。由此可見用 IN的SQL至少多了一個轉換的過程。一般的Oracle SQL都可以轉換成功,但對於含有分組統計等方面的SQL就不能轉換了。

Oracle在執行IN子查詢時,首先執行子查詢,將查詢結果放入臨時表再執行主查詢。而EXIST則是首先檢查主查詢,然後運行子查詢直到找到第一個匹配項。NOT EXISTS比NOT IN效率稍高。但具體在選擇IN或EXIST操作時,要根據主子表數據量大小來具體考慮。

推薦方案:在業務密集的Oracle SQL當中盡量不采用IN操作符。

不用NOT IN操作符,可以用NOT EXISTS或者外連接+替代 此操作是強列推薦不使用的,因為它不能應用表的索引。

推薦方案:用NOT EXISTS 或(外連接+判斷為空)方案代替

不用“<>”或者“!=”操作符。對不等於操作符的處理會造成全表掃描,可以用“<” or “>”代替

不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃描。

推薦方案:用其它相同功能的操作運算代替,如:

1)a<>0 改為 a>0 or a<0

2)a<>’’ 改為 a>’’

Where子句中出現IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執行全表掃描。可以考慮在設計表時,對索引列設置為NOT NULL。這樣就可以用其他操作來取代判斷NULL的操作
IS NULL 或IS NOT NULL操作(判斷字段是否為空) 判斷字段是否為空一般是不會應用索引的,因為B樹索引是不索引空值的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved