討論Oracle Exists用法__Oracle

來源:互聯網
上載者:User
 

學習Oracle時,經常會遇到Oracle Exists問題,這裡將介紹Oracle Exists問題的解決方案。Oracle使用了一個複雜的自平衡B-tree結構。通常,通過索引查詢資料比全表掃描要快。當 Oracle找出執行查詢和Update語句的最好路徑時,Oracle最佳化器將使用索引。同樣在連接多個表時使用索引也能夠提高效率。

另一個使用索引的好處是,他提供了主鍵(primary key)的唯一性驗證。那些LONG或LONG RAW資料類型, 您能夠索引幾乎任何的列。通常, 在大型表中使用索引特別有效. 當然,您也會發現, 在掃描小表時,使用索引同樣能提高效率。

雖然使用索引能得到查詢效率的提高,但是我們也必須注意到他的代價。索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改。這意味著每條記錄的INSERT,DELETE ,UPDATE將為此多付出4、5次的磁碟I/O 。因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢。週期性重構索引是有必要的:

 ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME>  

用Oracle Exists替換DISTINCT:

當提交一個包含一對多表資訊(比如部門表和僱員表)的查詢時,避免在SELECT子句中使用DISTINCT。一般能夠考慮用Oracle EXIST替換,Oracle Exists使查詢更為迅速,因為RDBMS核心模組將在子查詢的條件一旦滿足後,立即返回結果。例子:

 SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO  SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE Exists  ( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);  

◆SQL語句用大寫的;因為Oracle總是先解析SQL語句,把小寫字母轉換成大寫的再執行。
◆在Java代碼中盡量少用串連符“+”連接字串。
◆避免在索引列上使用NOT通常,我們要避免在索引列上使用NOT, NOT會產生在和在索引列上使用函數相同的影響。
◆當Oracle“碰到”NOT,他就會停止使用索引轉而執行全表掃描。
◆避免在索引列上使用計算。WHERE子句中,假如索引列是函數的一部分。最佳化器將不使用索引而使用全表掃描。

======================================

http://database.51cto.com/art/200911/164017.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.