新聞中心
在Oracle SQL的優(yōu)化的規(guī)則中我們***少用IN操作符,因為一般的IN操作符都是可以用EXISTS來代替,我們都知道用IN寫出的SQL的話,它的優(yōu)點就是比較容易寫及清晰易懂,但是用IN的SQL性能總是比較低的,從ORACLE執(zhí)行的步驟來分析用IN的SQL與不用IN的SQL有以下區(qū)別:

目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、北碚網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
ORACLE 試圖將其轉(zhuǎn)換成多個表的連接,如果轉(zhuǎn)換不成功則先執(zhí)行IN里面的子查詢,再查詢外層的表記錄,如果轉(zhuǎn)換成功則直接采用多個表的連接方式查詢。由此可見用 IN的SQL至少多了一個轉(zhuǎn)換的過程。一般的Oracle SQL都可以轉(zhuǎn)換成功,但對于含有分組統(tǒng)計等方面的SQL就不能轉(zhuǎn)換了。
Oracle在執(zhí)行IN子查詢時,首先執(zhí)行子查詢,將查詢結(jié)果放入臨時表再執(zhí)行主查詢。而EXIST則是首先檢查主查詢,然后運行子查詢直到找到***個匹配項。NOT EXISTS比NOT IN效率稍高。但具體在選擇IN或EXIST操作時,要根據(jù)主子表數(shù)據(jù)量大小來具體考慮。
推薦方案:在業(yè)務(wù)密集的Oracle SQL當中盡量不采用IN操作符。
不用NOT IN操作符,可以用NOT EXISTS或者外連接+替代 此操作是強列推薦不使用的,因為它不能應(yīng)用表的索引。
推薦方案:用NOT EXISTS 或(外連接+判斷為空)方案代替
不用“<>”或者“!=”操作符。對不等于操作符的處理會造成全表掃描,可以用“<” or “>”代替
不等于操作符是永遠不會用到索引的,因此對它的處理只會產(chǎn)生全表掃描。
推薦方案:用其它相同功能的操作運算代替,如:
1)a<>0 改為 a>0 or a<0
2)a<>’’ 改為 a>’’
Where子句中出現(xiàn)IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執(zhí)行全表掃描。可以考慮在設(shè)計表時,對索引列設(shè)置為NOT NULL。這樣就可以用其他操作來取代判斷NULL的操作
IS NULL 或IS NOT NULL操作(判斷字段是否為空) 判斷字段是否為空一般是不會應(yīng)用索引的,因為B樹索引是不索引空值的。
【編輯推薦】
- 對Oracle數(shù)據(jù)庫設(shè)計中字段的正確使用方案
- 訪問 Oracle 數(shù)據(jù)庫的實例描述
- Oracle數(shù)據(jù)庫的密集型實際應(yīng)用程序的開發(fā)
- 提高 Oracle JDBC的性能的辦法
- 淺談Oracle函數(shù)返回Table集合
標題名稱:OracleSQL的優(yōu)化的規(guī)則描述
本文網(wǎng)址:http://m.fisionsoft.com.cn/article/dhhgsgi.html


咨詢
建站咨詢
