簇的使用
2024-07-21 02:38:43
供稿:網友
- 選擇適合建簇的表
使用簇來保存主要用來查詢的表(而非插入和更新站主導),查詢時通常要聯合本簇內的多個表的數據,或者單個表中檢索出相關數據。
- 選擇合適的字段作為簇鍵
一個好的簇鍵應有足夠的唯一值以保證與每個鍵值響應的一組記錄能大約放滿一個數據塊。每個簇鍵值的記錄太少,既浪費空間,而在效率方面的改善卻微乎其微。每個簇鍵值的記錄太多,會造成額外的搜索來找到這個鍵值的記錄。過于一般化的鍵值(如男/女)額外的搜索可能導致比沒有簇更差的效率。
- 效率的考慮
簇相對于將一個表和他的索引分開存儲將降低DML語句(Insert, Update, Delete)的效率。這一缺點與空間的使用和掃描一個表所必需訪問的數據塊的數目有關系。由于是多個表共享每個數據塊,存儲一個簇表將使用比這個表不使用簇時更多的空間。
適合存儲在簇中的表:這些表通過完整性約束相關聯,并且通常使用SELECT語句將兩個或多個表聯合起來一起訪問。
假如你以用于關聯的字段為表建簇,你就能降低執行這個query時,所需訪問數據塊的數目;一個鍵值上的連接所需的所有記錄都在同一個數據塊中。
類似的把一個單獨的表存儲在簇中也很有用。例如,表EMP可以按照deptno字段建簇,將相同部門的雇員記錄放在一個數據塊中。假如應用通常一個部門一個部門處理記錄的話,就會得到好處。
hash簇的使用
hash簇適用于存儲那些靜態的并且經常用等查詢進行查詢的單獨的表或者簇表。
表和索引的分區
分區的方法 1- range partitioning ; 2- hash partitioning ; 3- composite partitioning
所有的分區的邏輯屬性是相同的,但他們的物理屬性可以不同。
分區的剪枝 (Partition PRuning)
Oracle server 可以自動識別分區,根據select 語句所指定的選擇條件,只查詢有用的分區。假如語句的條件中對分區字段使用了函數,優化器則不能進行分區剪枝,但to_date函數除外。
分區的優點:
- VLDB
對于大型的歷史數據表及其索引,將其按時間進行分區,分別治理和方便地添加和刪除。
對于要害任務數據:分區能降低維護窗口,恢復時間和故障影響,提高有效性。 分區能提高要害表和索引的訪問效率。
- 降低計劃維護的當機時間
可以只在某個分區上操作,而不是整個表上; 由于分區獨立性,操作可以在不同分區上并行執行。
- 降低數據故障引起的當機時間
由于恢復的單位變小了(為分區),所以:執行recover命令的時間降低了; 恢復離線的表空間所需磁盤空間也減少;不可用數據也減少了。
- DSS 性能
可以只作分區掃描而不是全表掃描,提高響應時間;并且能降低排序所需的臨時磁盤空間。
- I/O性能
將數據分配到不同的物理設備上,平衡I/O
- 分區透明性
Range partition
適合歷史數據的分區,通常按日期
Hash partition
適合于如下情形 性能原因(并行DML,分區剪枝,partition-wise聯接)
- 事先不知道映射到給定的范圍內的數據有多少
- 范圍分區的大小差別很大
- 分區剪枝和分區鍵上的partition-wise聯接非常重要
分區數目應是2的乘方(2,4,8,16。。。)
不能合并,刪除,拆分分區;但可以增加或減少分區的數目
Composite partition
使用range partition, 在每個分區上使用hash partition劃分子分區。