表空間及分區表的概念

      網友投稿 765 2025-03-31

      (1) 表空間及分區表的概念

      表空間:

      是一個或多個數據文件的集合,所有的數據對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。

      分區表:

      當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會下降,這時就應該考慮對表進行分區。表進行分區后,邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個表空間(物理文件上),這樣查詢數據時,不至于每次都掃描整張表。

      (2)表分區的具體作用

      Oracle 的表分區功能通過改善可管理 性、性能和可用性,從而為各式應用程序帶來了極大的好處。通常,分區可以使某些查詢以及維護操作的性能大大提高。此外,分區還可以極大簡化常見的管理任務,分區是構建千兆字節數據系統或超高可用性系統的關鍵工具。

      分區功能能夠將表、索引或索引組織表進一步細分為段,這些數據庫 對象的段叫做分區。每個分區有自己的名稱,還可以選擇自己的存儲 特性。從數據庫管理員的角度來看,一個分區后的對象具有多個段,這些段既可進行集體管理,也可單獨管理,這就使數據庫管理員在管理分區后的對象時有相當大的靈活性。但是,從應用程序的角度來看,分區后的表與非分區表完全相同,使用 SQL DML 命令訪問分區后的表時,無需任何修改。

      什么時候使用分區表:

      1、表的大小超過2GB。

      2、表中包含歷史數據,新的數據被增加都新的分區中。

      (3).表分區的優缺點

      表分區有以下優點:

      1、改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。

      2、增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用;

      3、維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可;

      4、均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能。

      缺點:

      分區表相關:已經存在的表沒有方法可以直接轉化為分區表。不過Oracle 提供了在線重定義表的功能。

      (4).表分區的幾種類型及操作方法

      一.范圍分區:

      表空間及分區表的概念

      范圍分區將數據基于范圍映射到每一個分區,這個范圍是你在創建分區時指定的分區鍵決定的。這種分區方式是最為常用的,并且分區鍵經常采用日期。舉個例子:你可能會將銷售數據按照月份進行分區。

      當使用范圍分區時,請考慮以下幾個規則:

      1、每一個分區都必須有一個VALUES LESS THEN子句,它指定了一個不包括在該分區中的上限值。分區鍵的任何值等于或者大于這個上限值的記錄都會被加入到下一個高一些的分區中。

      2、所有分區,除了第一個,都會有一個隱式的下限值,這個值就是此分區的前一個分區的上限值。

      3、在最高的分區中,MAXVALUE被定義。MAXVALUE代表了一個不確定的值。這個值高于其它分區中的任何分區鍵的值,也可以理解為高于任何分區中指定的VALUE LESS THEN的值,同時包括空值。

      例一:

      假設有一個CUSTOMER表,表中有數據200000行,我們將此表通過CUSTOMER_ID進行分區,每個分區存儲 100000行,我們將每個分區保存到單獨的表空間中,這樣數據文件就可以跨越多個物理磁盤。下面是創建表和分區的代碼,如下:

      CREATE TABLE CUSTOMER

      (

      CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,

      FIRST_NAME VARCHAR2(30) NOT NULL,

      LAST_NAME VARCHAR2(30) NOT NULL,

      PHONE VARCHAR2(15) NOT NULL,

      EMAIL VARCHAR2(80),

      STATUS CHAR(1)

      )

      PARTITION BY RANGE (CUSTOMER_ID)

      (

      PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,

      PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02

      )

      例二:按時間劃分

      CREATE TABLE ORDER_ACTIVITIES

      (

      ORDER_ID NUMBER(7) NOT NULL,

      ORDER_DATE DATE,

      TOTAL_AMOUNT NUMBER,

      CUSTOTMER_ID NUMBER(7),

      PAID CHAR(1)

      )

      PARTITION BY RANGE (ORDER_DATE)

      (

      PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01,

      PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,

      PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03

      )

      例三:MAXVALUE

      CREATE TABLE RangeTable

      (

      idd INT PRIMARY KEY ,

      iNAME VARCHAR(10),

      grade INT

      )

      PARTITION BY RANGE (grade)

      (

      PARTITION part1 VALUES LESS THEN (1000) TABLESPACE Part1_tb,

      PARTITION part2 VALUES LESS THEN (MAXVALUE) TABLESPACE Part2_tb

      );

      二.列表分區:

      該分區的特點是某列的值只有幾個,基于這樣的特點我們可以采用列表分區。

      例一

      CREATE TABLE PROBLEM_TICKETS

      (

      PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,

      DESCRIPTION VARCHAR2(2000),

      CUSTOMER_ID NUMBER(7) NOT NULL,

      DATE_ENTERED DATE NOT NULL,

      STATUS VARCHAR2(20)

      )

      PARTITION BY LIST (STATUS)

      (

      PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01,

      PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02

      例二

      CREATE TABLE ListTable

      (

      id INT PRIMARY KEY ,

      name VARCHAR (20),

      area VARCHAR (10)

      )

      PARTITION BY LIST (area)

      (

      PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb,

      PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb

      );

      )

      三.散列分區:

      這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,建議使用散列分區。

      散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,使得這些分區大小一致。

      例一:

      CREATE TABLE HASH_TABLE

      (

      COL NUMBER(8),

      INF VARCHAR2(100)

      )

      PARTITION BY HASH (COL)

      (

      PARTITION PART01 TABLESPACE HASH_TS01,

      PARTITION PART02 TABLESPACE HASH_TS02,

      PARTITION PART03 TABLESPACE HASH_TS03

      )

      簡寫:

      CREATE TABLE emp

      (

      empno NUMBER (4),

      ename VARCHAR2 (30),

      sal NUMBER

      )

      PARTITION BY HASH (empno) PARTITIONS 8

      STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

      hash分區最主要的機制是根據hash算法來計算具體某條紀錄應該插入到哪個分區中,hash算法中最重要的是hash函數,Oracle中如果你要使用hash分區,只需指定分區的數量即可。建議分區的數量采用2的n次方,這樣可以使得各個分區間數據分布更加均勻。

      四.組合范圍散列分區

      這種分區是基于范圍分區和列表分區,表首先按某列進行范圍分區,然后再按某列進行列表分區,分區之中的分區被稱為子分區。

      CREATE TABLE SALES

      (

      PRODUCT_ID VARCHAR2(5),

      SALES_DATE DATE,

      SALES_COST NUMBER(10),

      STATUS VARCHAR2(20)

      )

      PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)

      (

      PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009

      (

      SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,

      SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009

      ),

      PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009

      (

      SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,

      SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009

      )

      )

      五.復合范圍散列分區:

      這種分區是基于范圍分區和散列分區,表首先按某列進行范圍分區,然后再按某列進行散列分區。

      create table dinya_test

      (

      transaction_id number primary key,

      item_id number(8) not null,

      item_description varchar2(300),

      transaction_date date

      )

      partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

      (

      partition part_01 values less than(to_date(‘2006-01-01’,’yyyy-mm-dd’)),

      partition part_02 values less than(to_date(‘2010-01-01’,’yyyy-mm-dd’)),

      partition part_03 values less than(maxvalue)

      );

      (5).有關表分區的一些維護性操作:

      一、添加分區

      以下代碼給SALES表添加了一個P3分區

      ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));

      注意:以上添加的分區界限應該高于最后一個分區界限。

      以下代碼給SALES表的P3分區添加了一個P3SUB1子分區

      ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');

      二、刪除分區

      以下代碼刪除了P3表分區:

      ALTER TABLE SALES DROP PARTITION P3;

      在以下代碼刪除了P4SUB1子分區:

      ALTER TABLE SALES DROP SUBPARTITION P4SUB1;

      注意:如果刪除的分區是表中唯一的分區,那么此分區將不能被刪除,要想刪除此分區,必須刪除表。

      三、截斷分區

      截斷某個分區是指刪除某個分區中的數據,并不會刪除分區,也不會刪除其它分區中的數據。當表中即使只有一個分區時,也可以截斷該分區。通過以下代碼截斷分區:

      ALTER TABLE SALES TRUNCATE PARTITION P2;

      通過以下代碼截斷子分區:

      ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

      四、合并分區

      合并分區是將相鄰的分區合并成一個分區,結果分區將采用較高分區的界限,值得注意的是,不能將分區合并到界限較低的分區。以下代碼實現了P1 P2分區的合并:

      ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;

      本文轉載自異步社區。

      原文鏈接:

      https://www.epubit.com/articleDetails?id=Ndda948ee-ec47-454d-aac5-601d5d0003ec

      軟件開發 Web應用防火墻 WAF

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel2010制作圖表時如何添加誤差線讓圖表表達的更為準確(excel作圖顯示誤差線)
      下一篇:如何限定用戶只能操作工作表中指定區域?
      相關文章
      久久精品国产精品亚洲毛片| 亚洲精品国精品久久99热一| 亚洲色自偷自拍另类小说| 欧美日韩亚洲精品| 国产亚洲精品bv在线观看| 亚洲卡一卡2卡三卡4麻豆| 亚洲精品福利网站| 亚洲白嫩在线观看| 亚洲美女在线观看播放| 亚洲精品白色在线发布| 久久精品国产亚洲av麻豆小说| 久久久久亚洲Av片无码v| 久久精品国产亚洲AV麻豆王友容 | 亚洲图片一区二区| 色播亚洲视频在线观看| 亚洲av中文无码乱人伦在线r▽| 久久精品国产亚洲香蕉| 少妇中文字幕乱码亚洲影视| 亚洲视频一区在线| 亚洲天堂中文字幕在线观看| 亚洲在成人网在线看| 亚洲av产在线精品亚洲第一站| 亚洲综合丁香婷婷六月香| 国产精品亚洲四区在线观看| 亚洲精品第一综合99久久| 亚洲色欲色欱wwW在线| 亚洲AV日韩AV一区二区三曲| 精品久久久久亚洲| 亚洲女同成人AⅤ人片在线观看 | 国产∨亚洲V天堂无码久久久| 久久91亚洲精品中文字幕| 4480yy私人影院亚洲| 亚洲一级毛片在线播放| 亚洲最大无码中文字幕| 亚洲国产成人AV网站| 国产亚洲综合一区二区三区| 亚洲综合伊人久久综合| 亚洲国产精品线在线观看| 亚洲最大的视频网站| 亚洲中文字幕精品久久| 国产精品亚洲小说专区|