深入oracle索引,分割區

2020-10-02 01:00:13

深入oracle分割區索引

什麼是索引
索引是與表關聯的可選結構,是一種快速存取資料的途徑,可提高資料庫效能, 資料庫可以明確地建立索引, 以加快對錶執行SQL 語句的速度 當索引鍵作為查詢條件時 該索引將直接指向包含這些值的行的位置,即便刪除索引 也無需修改任何sql語句的定義.

索引的分類

物理分類邏輯分類
分割區或非分割區索引單列和組合索引
B樹索引(標準索引)唯一或非唯一索引
正常或反向鍵索基於函數索引
點陣圖索引

如以下範例程式碼

1.唯一索引


CREATE UNIQUE INDEX index_unique_id ON customers(customer_id );

2.反向鍵索引

CREATE UNIQUE INDEX index_reverse_id ON customers(customer_id )REVERSE;

3.點陣圖索引


CREATE BITMAP INDEX index_bit_territory ON customers (nls_territory ) 

4.大寫函數索引

CREATE INDEX index_name ON customers(UPPER (cust_first_name))

5.刪除索引

DROP INDEX index_bit_job;

6.重複索引

ALTER INDEX index_reverse_empno REBUILD NOREVERSE;

表的分割區

什麼是表分割區
Oracle 允許使用者把一個表中的所有行分為 幾個部分, 並將這些部分儲存在不同的位置, 被分割區的表稱為分割區表, 分成的每個部分 稱為一個分割區

表分割區的優點

  1. 改善表的查詢效能, 在對錶進行分割區後, 使用者執行SQL查詢時可以只存取表中的特定分割區而非整個表
  2. 表更容易管理, 因為分割區表的資料儲存在多個部分中, 按分割區載入和刪除資料比在表中載入和刪除更容易
  3. 便於備份和恢復, 可以獨立的備份和和恢復每個分割區
  4. 提高資料庫的安全性,將不同的分割區分佈在不同的磁碟, 可以減小所有分割區的資料同時損壞的可能性

範例程式碼如下

create table rangeorders(
order_id NUMBER(12) primary key,
order_date DATE NOT NULL,
order_mode VARCHAR2(8),
customer_id NUMBER(6) NOT NULL,
order_status NUMBER(2),
order_total NUMBER(8,2),
sales_rep_id NUMBER(6),
promtion_id NUMBER(6)
)
PARTITION BY RANGE (order_date)(
   PARTITION p1 values LESS THAN (TO_DATE('2005/01/01','yyyy/mm/dd')),
   PARTITION p2 values LESS THAN (TO_DATE('2006/01/01','yyyy/mm/dd')),
   PARTITION p3 values LESS THAN (TO_DATE('2007/01/01','yyyy/mm/dd')),
   PARTITION p4 values LESS THAN (TO_DATE('2008/01/01','yyyy/mm/dd')),
   PARTITION p5 values LESS THAN (TO_DATE('2009/01/01','yyyy/mm/dd')),
   PARTITION p6 values LESS THAN (MAXVALUE)
)

檢視05年度的資料

SELECT * FROM rangeorders PARTITION(P1)

分割區的範圍

分割區方法包括範圍分割區, 雜湊分割區 , 列表分割區 , 複合分割區 , 間隔分割區 , 和虛擬列分割區,