【學習筆記】分割槽表和分割槽索引——概念部分(一)
上週看了《[三思筆記]全面學習分割槽表及分割槽索引.pdf》,按學習順序記錄將學習筆記粘出來如下:
當表中的資料量不斷增加,查詢資料的速度就會變慢,程式效能也會降低,這時候或許可以考慮將表分割槽。表進行分割槽後,邏輯上表仍然是一個邏輯表,但是由於進行了分割槽,就可以將每個分割槽分別存放到不同的物理檔案裡(每個分割槽對應一個段,一個或多個段可以存放到一個表空間,而一個或多個物理檔案又可以存放到一個表空間裡,結果就是可能每個分割槽存放到不同的物理文件裡)
一、使用分割槽的優點:
1、增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用
2、維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;
3、可均衡I/O:可以把不同的分割槽影射到磁碟一平衡I/O,改善整個系統效能
4、改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度
二、Oracle資料庫分割槽的方法有:
1、範圍分割槽(Range)
2、HASH分割槽(Hash)
3、列表分割槽(List)
4、複合分割槽(Composite)
4.1 範圍+HASH(range-hash)
4.2 範圍+列表(range-list)
三、各種分割槽的特點:
1、 範圍分割槽是根椐分割槽鍵的不同取值範圍來劃分子集的,關鍵字RANGE,VALUES LESS THAN;
2、列表分割槽是根椐分割槽鍵的一些離散的取值來劃分子集的,關鍵字 list,VALUES;
3、雜湊分割槽是應用雜湊演算法將分割槽鍵對應到某個子集中去,關鍵字 hash,PARTITIONS;
4、混合分割槽只能有兩層,第一層是範圍分割槽,第二層可以是列表分割槽或者雜湊分割槽;
四、分割槽表的建立:
1、建立 range 分割槽表
create table t_partition_range(id number,name varchar2(50))
partition by range(id)
(
partition t_range_p1 values less than(10) tablespace test1,
partition t_range_p2 values less than(20) tablespace test2,
partition t_range_p3 values less than(30) tablespace test3,
partition t_range_p4 values less than(maxvalue) tablespace test4
);
注意:分割槽表儲存表空間可選,即可以是同一個表空間也可以是不同表空間;可以寫也可以不寫,如果不顯示寫分割槽儲存表空間,
則表空間預設和表所儲存表空間一致。
user_part_tables:記錄分割槽的表資訊
user_tab_partitions:記錄表的分割槽的資訊
對 range 分割槽表建立 global 或 local 分割槽索引:
(1)建立global索引range分割槽:
create index idx_parti_range_id on t_partition_range(id)
global partition by range(id)(
partition i_range_p1 values less than(10),
partition i_range_p2 values less than(20),
partition i_range_p3 values less than(30),
partition i_range_pmax values less than(maxvalue)
);
建立global索引的分割槽與建立表的分割槽語句格式完全相同,而且其分割槽形式與索引所在表的分割槽形式沒有關聯關係。
另外需要說明的是:對於range型別的分割槽表,不是隻能建立range分割槽的global索引,也可以建立hash分割槽的global索引或其他。
user_part_indexes:記錄分割槽的索引資訊
user_ind_partitions:記錄索引的分割槽資訊
注意:建立 global 索引分割槽和建立分割槽表語法一樣;global 各個索引分割槽所在表空間可以顯示寫(任意指定)也可以不寫,如果不顯示寫分割槽儲存表空間,則表空間預設和表所儲存表空間一致。
(2)建立 local 索引:
drop index idx_parti_range_id;
create index idx_parti_range_id on t_partition_range(id) local;
這個 local 沒有指定每個分割槽索引所在表空間,當然也可以自定義。
create index idx_part_range_id on t_partition_range(id) local(
partition i_range_p1 tablespace test1,
partition i_range_p2 tablespace test2,
partition i_range_p3 tablespace test3,
partition i_range_pmax tablespace test4
);
2、建立 hash 分割槽
hash 分割槽的建立有兩種方式:
(1)直接指定分割槽名,分割槽鎖在表空間等資訊。
(2)只指定分割槽數量,和可供使用的表空間。
建立hash分割槽表:
create table t_partition_hash(id number,name varchar2(50))
partition by hash(id)(
partition t_hash_p1 tablespace test1,
partition t_hash_p2 tablespace test2,
partition t_hash_p3 tablespace test3
);
實現上述效果還可以這樣:
create table t_partition_hash3(id number,name varchar2(50))
partition by hash(id)
partitions 2 store in (test1,test2,test3);
注意:分割槽表個數和儲存的表空間個數不是一一對應的,那麼這個建立 hash 分割槽的結果會是什麼樣的呢?
SQL> select upt.table_name,upt.partitioning_type,upt.partition_count
2 from user_part_tables upt where upt.table_name='T_PARTITION_HASH2';
TABLE_NAME PARTITIONING_TYPE PARTITION_COUNT
------------------------------ ----------------- ---------------
T_PARTITION_HASH2 HASH 5
SQL> select utp.table_name,utp.partition_name,utp.tablespace_name from user_tab_partitions utp where utp.table_name='T_PARTITION_HASH3';
TABLE_NAME PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------ -----------------------
T_PARTITION_HASH2 SYS_P128 TEST1
T_PARTITION_HASH2 SYS_P129 TEST2
T_PARTITION_HASH2 SYS_P130 TEST3
T_PARTITION_HASH2 SYS_P131 TEST1
T_PARTITION_HASH2 SYS_P132 TEST2
結果:建立了5個分割槽,即建立的分割槽個數和指定個數一致。
建立global索引hash分割槽
create index idx_part_hash_id on t_partition_hash2(id)
global partition by hash(id)
partitions 8 store in (test1,test2,test3);
如果建立上面這種 global 索引會出現什麼情況呢?當然也是建立8個分割槽索引。
3、建立list分割槽
create table t_partition_list(id number,name varchar2(50))
partition by list(id)
(
partition t_list_p1 values (1,2,3,4,5,6,7,8,9) tablespace test1,
partition t_list_p2 values (10,11,12,13,14,15,16,17,18,19) tablespace test2,
partition t_list_p3 values (20,21,22,23,24,25,26,27,28,29) tablespace test3,
partition t_list_p4 values (default) tablespace test4
);
4、建立range_hash組合分割槽
(1)為所有分割槽各建立4個hash子分割槽。
create table t_partition_rh(id number,name varchar2(50))
partition by range(id) subpartition by hash(name)
subpartitions 4 store in (test1,test2,test3)
(
partition t_r_p1 values less than(10),
partition t_r_p2 values less than(20),
partition t_r_p3 values less than(30),
partition t_r_p4 values less than(maxvalue)
);
(2)對某個表建立hash子分割槽
create table t_partition_rh(id number,name varchar2(50))
partition by range(id) subpartition by hash(name)
(
partition t_r_p1 values less than (10) tablespace test1,
partition t_r_p2 values less than (20) tablespace test2,
partition t_r_p3 values less than (30) tablespace test3
(
subpartition t_r_p3_h1 tablespace test1,
subpartition t_r_p3_h2 tablespace test2,
subpartition t_r_p3_h3 tablespace test3
),
partition t_r_p4 values less than (40) tablespace test4
);
(3)給各個分割槽指定不同的子分割槽
create table t_partition_rh(id number,name varchar2(50))
partition by range(id) subpartition by hash(name)(
partition t_r_p1 values less than (10),
partition t_r_p2 values less than (20)
(
subpartition t_r_p2_h1,
subpartition t_r_p2_h2
),
partition t_r_p3 values less than (30)
subpartitions 3,
partition t_r_pd values less than (maxvalue)
(
subpartition t_r_p3_h1,
subpartition t_r_p3_h2,
subpartition t_r_p3_h3
)
);
select 由上可知:未顯示指定子分割槽的分割槽,系統會自動建立一個子分割槽。
(4)分割槽模板的應用
oracle提供的分割槽模板,在指定子分割槽信賴列之後,制定子分割槽的儲存模板,各個分割槽即會按照子分割槽模式建立子分割槽,如:
create table t_partition_rh(id number,name varchar2(50))
partition by range(id) subpartition by hash(name)
subpartition template(
subpartition h1,
subpartition h2,
subpartition h3,
subpartition h4)
(
partition t_r_p1 values less than (10),
partition t_r_p2 values less than (20),
partition t_r_p3 values less than (30),
partition t_r_pd values less than (maxvalue)
);
建立複合分割槽 local 索引:
create index idx_part_r1_id on t_partition_rh(id) local;
5、建立 range-list 組合分割槽
range-list 組合分割槽的建立和 range-hash 相似,不再舉例。
公共準則:
1、如果選擇的分割槽不能確保各分割槽內記錄量的平均值,則這種分割槽方式有可能是不恰當的。
2、對於分割槽的表或索引,其所涉及的所有分割槽,其塊大小必須一致。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-1037956/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 移動分割槽表和分割槽索引的表空間索引
- hive學習筆記之四:分割槽表Hive筆記
- oracle分割槽表和分割槽表exchangeOracle
- oracle分割槽表和非分割槽表exchangeOracle
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 增加表分割槽時,為local分割槽索引指定不同表空間的方法索引
- 測試分割槽表部分匯出
- 非分割槽錶轉換成分割槽表
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- PG的非分割槽表線上轉分割槽表
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- 【MYSQL】 分割槽表MySql
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- MySQL 分割槽表,為什麼分割槽鍵必須是主鍵的一部分?MySql
- MySQL 分割槽表探索MySql
- 分割槽表-實戰
- 記一次Oracle分割槽表全域性索引重建的過程Oracle索引
- Linux分割槽方案、分割槽建議Linux
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- 分割槽表之自動增加分割槽(11G)
- Spark學習——分割槽Partition數Spark
- MySQL資料表分割槽手記MySql
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer
- 非分割槽錶轉換成分割槽表以及注意事項
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- SQL Server大分割槽表沒有空分割槽的情況下如何擴充套件分割槽的方法SQLServer套件
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- index_oracle索引梳理系列及分割槽表梳理IndexOracle索引
- Hive中靜態分割槽和動態分割槽總結Hive
- SQL SERVER之分割槽表SQLServer