1.表空間:是一個或多個數據文件的集合,主要存放的是表,所有的數據對象都存放在指定的表空間中;一個數據文件只能屬于一個表空間,一個數據庫空間由若干個表空間組成,其中包括:
a.系統表空間:10g以前,默認系統表空間是System,10g包括10g以后,默認系統表空間是User,存放數據字典和視圖以及數據庫結構等重要系統數據信息。
b.Temp表空間:臨時表空間,安裝數據庫時創建。
c.用戶自定義表空間:用戶可以通過Create tablspace命令創建表空間。
2.分區表:當表中的數據量不斷增大,查詢數據的速度會變慢,應用程序的性能就會下降,這時就應該考慮對表分區;表進行分區后邏輯上還是一張完整的表,只是把表中的數據存放到不同的表空間(物理文件上),這樣查詢就不用掃描整張表。
3.什么時候使用分區表:
a.表的大小超過2GB。
b.表中包含歷史數據,新的數據被增加到新的分區中。
4.表分區的優缺點:
優點:(1)改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高查詢效率。
? ? ?(2)增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用。
? ? ?(3)維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可。
? ? ?(4)均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能。
缺點:已經存在的表沒有方法可以直接轉化為分區表。
5.表分區的幾種類型及操作方法:
a.范圍分區:按照指定的范圍來分區,這種分區方式是最常用的,例如按日期
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY RANGE (CUSTOMER_ID)?
(?
? ? PARTITION CUS_PART1 VALUES LESS THAN (100) TABLESPACE CUS_TS01,?
? ? PARTITION CUS_PART2 VALUES LESS THAN (200) TABLESPACE CUS_TS02,
? ? PARTITION CUS_PART3 VALUES LESS THAN (maxvalue) TABLESPACE CUS_TS03
);
select count(*) cn from MYCUSTOMER PARTITION (CUS_PART1);
select count(*) cn from MYCUSTOMER PARTITION (CUS_PART2);
b.列表分區:該分區的特點是某列的值只有幾個,例如性別,身份證號,城市。
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY LIST (SEX)?
(?
? ? ? PARTITION par_sexm VALUES ('m') TABLESPACE CUS_TS01,?
? ? ? PARTITION par_sexf VALUES ('f') TABLESPACE CUS_TS02
);
select count(*) cn from MYCUSTOMER PARTITION (par_sexm) where CUSTOMER_ID<10;
select count(*) cn from MYCUSTOMER PARTITION (par_sexf);
c.散列分區:這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,建議使用散列分區。
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY HASH (CUSTOMER_ID)?
(?
? ? ? PARTITION hash1 TABLESPACE CUS_TS01,?
? ? ? PARTITION hash2 TABLESPACE CUS_TS02,
? ? ? PARTITION hash3 TABLESPACE CUS_TS03
);
select count(*) cn from MYCUSTOMER PARTITION (hash1);
select count(*) cn from MYCUSTOMER PARTITION (hash2);
select count(*) cn from MYCUSTOMER PARTITION (hash3);
a.系統表空間:10g以前,默認系統表空間是System,10g包括10g以后,默認系統表空間是User,存放數據字典和視圖以及數據庫結構等重要系統數據信息。
b.Temp表空間:臨時表空間,安裝數據庫時創建。
c.用戶自定義表空間:用戶可以通過Create tablspace命令創建表空間。
2.分區表:當表中的數據量不斷增大,查詢數據的速度會變慢,應用程序的性能就會下降,這時就應該考慮對表分區;表進行分區后邏輯上還是一張完整的表,只是把表中的數據存放到不同的表空間(物理文件上),這樣查詢就不用掃描整張表。
3.什么時候使用分區表:
a.表的大小超過2GB。
b.表中包含歷史數據,新的數據被增加到新的分區中。
4.表分區的優缺點:
優點:(1)改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高查詢效率。
? ? ?(2)增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用。
? ? ?(3)維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可。
? ? ?(4)均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能。
缺點:已經存在的表沒有方法可以直接轉化為分區表。
5.表分區的幾種類型及操作方法:
a.范圍分區:按照指定的范圍來分區,這種分區方式是最常用的,例如按日期
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY RANGE (CUSTOMER_ID)?
(?
? ? PARTITION CUS_PART1 VALUES LESS THAN (100) TABLESPACE CUS_TS01,?
? ? PARTITION CUS_PART2 VALUES LESS THAN (200) TABLESPACE CUS_TS02,
? ? PARTITION CUS_PART3 VALUES LESS THAN (maxvalue) TABLESPACE CUS_TS03
);
select count(*) cn from MYCUSTOMER PARTITION (CUS_PART1);
select count(*) cn from MYCUSTOMER PARTITION (CUS_PART2);
b.列表分區:該分區的特點是某列的值只有幾個,例如性別,身份證號,城市。
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY LIST (SEX)?
(?
? ? ? PARTITION par_sexm VALUES ('m') TABLESPACE CUS_TS01,?
? ? ? PARTITION par_sexf VALUES ('f') TABLESPACE CUS_TS02
);
select count(*) cn from MYCUSTOMER PARTITION (par_sexm) where CUSTOMER_ID<10;
select count(*) cn from MYCUSTOMER PARTITION (par_sexf);
c.散列分區:這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,建議使用散列分區。
CREATE TABLE MYCUSTOMER?
(?
? ? CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,?
? ? FIRST_NAME ?VARCHAR2(30) NOT NULL,?
? ? SEX ? ? ? CHAR(1)?
)?
PARTITION BY HASH (CUSTOMER_ID)?
(?
? ? ? PARTITION hash1 TABLESPACE CUS_TS01,?
? ? ? PARTITION hash2 TABLESPACE CUS_TS02,
? ? ? PARTITION hash3 TABLESPACE CUS_TS03
);
select count(*) cn from MYCUSTOMER PARTITION (hash1);
select count(*) cn from MYCUSTOMER PARTITION (hash2);
select count(*) cn from MYCUSTOMER PARTITION (hash3);