測試 partition table與沒有partition的table 效能的差異,由於partition table有許多類型
因次小弟這次只操作類型range
partition table主要是將一張很大量的資料表透過切割的方法將他分散到多個表空間的資料表中,減少資料表的IO
在此先建立表空間
create tablespace tbs1;
create tablespace tbs2;
create tablespace tbs3;
create tablespace tbs4;
select * from v$tablespace; 這是查看表空間的指令
建立沒有partition的資料表(t1)
create table t1 (object_id number,owner varchar2(20),object_name varchar2(50));
insert into t1 select object_id,owner,object_name from dba_objects;
建立partition表(t) 以object_id15000為range
create table t (object_id number ,owner varchar2(20),object_name varchar2(50))
partition by range (object_id)
(
partition table1 VALUES LESS THAN (15000) tablespace tbs1,
partition table2 VALUES LESS THAN (30000) tablespace tbs2,
partition table3 VALUES LESS THAN (45000) tablespace tbs3,
partition table4 VALUES LESS THAN (maxvalue) tablespace tbs4);
insert 資料
insert into t select object_id,owner,object_name from dba_objects;
select count(*) from t;
有56244筆資料 * 資料筆數越多越好 越能看出差異
開始測試:
測試1: 查詢object_id<12000的資料
測試2: 跨區間查詢object_id 100~50000的資料
小結:
測試一
| 表格 | consistent gets(總讀取數量) | physical reads |
| T | 922 | 75 |
| T1 | 1062 | 285 |
在object_id<12000作全表掃描(table access full),由於t表在table1分區終究可以查到,會比t1表全掃描效能
提升,IO降低
測試二
| 表格 | consistent gets(總讀取數量) | physical reads |
| T | 3615 | 317 |
| T1 | 3515 | 283 |
在object_id 100~50000的查詢中,由於t表需要跨所有分區查詢,所以效能不一定比較好(在此範例效能是略差一點)
因此,透過partition table不一定會使效能提升,還是要看查詢條件或是分區方法來決定~
