一則簡單樣本看Oracle的“無私”健壯性

來源:互聯網
上載者:User

標籤:oracle   執行計畫   

Oracle的強大之處就在於他能總協助讓你選擇正確的執行計畫,即使你給了它錯誤的指示。


實驗:

1. 建立測試表


收集統計資訊:


建立B樹索引:


2. 執行select id from tbl_plan;查看它的執行計畫

因為建立了B樹索引,正常講可以從索引中獲得id的值,不用全表掃描,但這裡使用了全表掃描的方式。


即使使用了HINT,這依舊使用的是全表掃描:



原因在於這是個B樹索引,不會儲存NULL值,儘管這張表沒有NULL值。如果直接從可能包含NULL值的B樹索引中查詢記錄,NULL值不會儲存於索引,就會漏一些記錄,那麼查詢結果就會有錯,所以Oracle在此並沒有選擇使用索引掃描,而是進行的全表掃描


3. 將id欄位設為非空

相當於這是一個唯一性索引了。


再執行select id from tbl_plan;:

Oracle選擇的是索引快速全掃描,因為id是索引欄位,直接從索引中獲得值是最快速的方式。


如果是使用了HINT的方式:

這使用的是索引全掃描,不如索引快速全掃描,但至少HINT起到了作用,原因就在於從非空索引中獲得值是一種可靠的方式,因此Oracle允許HINT的使用


總結

從上面的簡單樣本可以看到,Oracle總會幫你選擇正確的執行計畫,即使你將錯誤的資訊給了Oracle,Oracle這種“無私”的精神值得我們學習,如果我們的應用系統也是這樣足夠健壯,那就更好了。

一則簡單樣本看Oracle的“無私”健壯性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.