程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 一則簡單示例看Oracle的“無私”健壯性

一則簡單示例看Oracle的“無私”健壯性

編輯:Oracle教程

一則簡單示例看Oracle的“無私”健壯性


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

實驗:

1. 創建測試表

\

收集統計信息:

\

創建B樹索引:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141031/2014103109132018.png" alt="\">

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的方式:

l逗'€rOm9鉌…?http://www.Bkjia.com/database/Oracle/Oracle允許HINT的使用。

總結

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

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