數據訪問方法
數據訪問方法
爲了提高性能, 您可以使用以下數據訪問方法:
• 索引 (B-樹, 位圖, 反向鍵 )
• 索引編排表
• 簇
• 直方圖
• 實體化視圖
何時創建 B-樹索引
B-樹索引通常可改進一些查詢的性能這些查詢從表中選擇小百分比的行一
般說來應該爲經常查詢的行少於總行數的 5% 的表創建索引如果可以從索
引中檢索所有數據或者索引的列可以用於連接其它表則可以增大該值
索引如何增長
索引始終是平衡的並且它們從底部開始增長
在關鍵字單調增加的情況下索引級隨着行的增加而趨於增長新條目被添加
到索引的右側當右側的多數葉塊充滿時Oracle 服務器將其拆分成兩個塊
並將塊的 50% 放置在原來位置50% 放置在新的葉塊中
該模式重複進行直到右側多數分支塊已充滿並拆分成兩塊爲止該進程一
直重複直到根塊爲止然後 Oracle 服務器添加一個新級別的分支塊索引越
深效率變得越低
如何解決 B-樹索引性能降低的問題
應該定期重建索引然而這是個耗費時間的任務尤其在基表非常大的情況
下在 Oracle8i 中創建和重建索引可以聯機進行並且還可以進行並行化
請注意在重建索引期間相關的基表仍然可以用於查詢和 DML 操作在重
建索引時還可以爲基於成本的優化程序計算統計
SQL> ALTER INDEX i_name REBUILD
2 [PARALLEL n] ONLINE
3 [COMPUTE STATISTICS]
4 [NOLOGGING];
關鍵字 ONLINE 表示在重建索引期間允許對錶和分區的 DML 操作
限制在聯機建立索引期間不支持並行 DML 如果指定 ONLINE 然後發佈並
行 DML 語句Oracle 服務器會返回一個錯誤
位圖索引
• 用於低基數列
• 適用於多含義的情況
• 使用最小存儲空間
• 最適合於只讀系統
• 適用於很大的表
何時創建位圖索引
• 位圖索引預定用於低基數 列它包含有限數量的值
• 如果使用帶有多個 WHERE 條件的查詢則 Oracle 服務器可以使用邏輯 bit-
AND 或 bit-OR 操作以便將該位圖與其它列的位圖合併
性能考慮事項
• 位圖索引使用很少的存儲空間每個唯一關鍵字值有一個條目以壓縮格式
存儲每個位圖分爲多個位圖段二分之一塊
• 在低基數列上它們與多個謂詞的聯合運行速度很快
• 它們特別適用於大型只讀系統如 DSS
• DML 語句降低性能它們不適用於 OLTP 應用程序
• 鎖定發生在位圖段級而不是條目級
並行查詢PDML 並行數據操縱語言以及並行 CREATE 語句與位圖索引一
同工作
創建和維護位圖索引
SQL> create BITMAP INDEX ord_region_id_idx
2 on ord(region_id)
3 storage (initial 200k next 200k
4 pctincrease 0 maxextents 50)
5 tablespace indx01;.
維護考慮事項
在 DSS 環境中通常使用批量插入和更新來維護數據索引維護推遲到每個
DML 操作結束後進行例如如果將 1,000 行插入到一個有位圖索引的表則
將插入行的位圖列信息和 ROWID 信息置於對排序緩衝區的引用中然後批處
理所有 1,000 條索引條目的更新這就是爲獲得位圖索引的插入和更新的良好
性能必須正確設置 SORT_AREA_SIZE 的原因這樣每個 DML 操作僅更新
一次每個位圖段即使該段中不止一行發生更改也是如此
B-樹索引和位圖索引的比較
B-樹索引位圖索引
適用於高基數列適用於低基數列
在鍵上更新相對價廉更新鍵行非常昂貴
使用 OR 謂詞的查詢效率很低使用 OR 謂詞的查詢效率很高
行級鎖定位圖段級鎖定
存儲較多存儲較少
對 OLTP 有用對 DSS 有用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.