oracle優化:避免全表掃描


oracle優化:避免全表掃描

http://www.cnblogs.com/oraclelike/p/6146436.html

如果我們查詢了一條SQL語句,這條SQL語句進行了全表掃描,那到底是掃描了多少個數據塊呢?是表有多少數據,就掃描多少塊嗎?不是的。而是掃描高水位線一下的所有塊。有的時候有人經常說,我的表也不大呀,怎么查詢了這么久,其實奧秘就是高水位線了。

  在數據庫表剛建立的時候,由於沒有任何數據,所以這個時候水位線是空的,也就是說HWM為最低值。當插入了數據以后,高水位線就會上漲,但是這里也有一個特性,就是如果你采用delete語句刪除數據的話,數據雖然被刪除了,但是高水位線卻沒有降低,還是你剛才刪除數據以前那么高的水位。也就是說,這條高水位線在日常的增刪操作中只會上漲,不會下跌。HWM通常增長的幅度為一次5個數據塊.

 這也就產生一種我們經常遇到的情況,產生大量碎片。如何消除碎片呢?有move和shrink兩種方法。1.如果你只是收縮空間,數據增長很慢,那用shrink可以但是如果數據增長很快的話,用move就比較合適。2.move從segment的底部開始,move這些rows到segment的頭部。Shrink則是delete/insert相結合,這樣會產生非常多的UNDO和REDO。(move和shrink之后,索引會失效,需要重建索引)推薦使用move。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM