http://www.jyygyx.com/oracle/的強大的地方就在于他能總幫助讓你選擇正確的履行計劃,即便你給了它毛病的唆使。
實驗:
1. 創(chuàng)建測試表:
搜集統(tǒng)計信息:
創(chuàng)建B樹索引:
2. 履行select id from tbl_plan;查看它的履行計劃:
由于創(chuàng)建了B樹索引,正常講可以從索引中取得id的值,不用全表掃描,但這里使用了全表掃描的方式。
即便使用了HINT,這照舊使用的是全表掃描:
緣由在于這是個B樹索引,不會存儲NULL值,雖然這張表沒有NULL值。如果直接從可能包括NULL值的B樹索引中查詢記錄,NULL值不會存儲于索引,就會漏1些記錄,那末查詢結(jié)果就會有錯,所以http://www.jyygyx.com/oracle/在此并沒有選擇使用索引掃描,而是進行的全表掃描。
3. 將id字段設(shè)為非空:
相當(dāng)于這是1個唯1性索引了。
再履行select id from tbl_plan;:
http://www.jyygyx.com/oracle/選擇的是索引快速全掃描,由于id是索引字段,直接從索引中取得值是最快速的方式。
如果是使用了HINT的方式:
這使用的是索引全掃描,不如索引快速全掃描,但最少HINT起到了作用,緣由就在于從非空索引中取得值是1種可靠的方式,因此http://www.jyygyx.com/oracle/允許HINT的使用。
總結(jié):
從上面的簡單示例可以看到,http://www.jyygyx.com/oracle/總會幫你選擇正確的履行計劃,即便你將毛病的信息給了http://www.jyygyx.com/oracle/,http://www.jyygyx.com/oracle/這類“忘我”的精神值得我們學(xué)習(xí),如果我們的利用系統(tǒng)也是這樣足夠硬朗,那就更好了。