分割槽與索引

2021-08-21 08:08:20 字數 3702 閱讀 7732

oracle表分割槽分為四種:範圍分割槽,雜湊分割槽,列表分割槽和復合分割槽

1.      範圍分割槽

就是根據資料庫表中某一字段的值的範圍來劃分分割槽。

partition by range(grade)  

partition bujige values lessthan(60), --不及格  

partition jige values lessthan(85), --及格  

partition youxiu values lessthan(maxvalue) --優秀  

按照值範圍動態建立分割槽

partition by range(grade) interval(範圍值)

2.      雜湊分割槽

雜湊分割槽是根據欄位的hash值進行均勻分布,盡可能的實現各分割槽所雜湊的資料相等。

partition by hash(sno)  

partition p1,  

partition p2,  

partition p3  

3.      列表分割槽

列表分割槽明確指定了根據某字段的某個具體值進行分割槽,而不是像範圍分割槽那樣根據欄位的值範圍來劃分的。

partition by list(dormitory)  

partition d229values('229'),  

partition d228values('228'),  

partition d240values('240')  

4.      復合分割槽

有範圍-雜湊分割槽,範圍-列表分割槽。

範圍-雜湊分割槽時列表分割槽不支援多列,但是範圍分割槽和雜湊分割槽支援多列。

partition byrange(grade)  

subpartition byhash(sno,sname)  

partition p1 values less than(75)  

subpartition sp1,subpartitionsp2  

partition p2 values less than(maxvalue)  

subpartition sp3,subpartitionsp4  

範圍-列表分割槽有兩種創立方式,沒有模板的建立方式和有模板的建立方式。

1)查詢分割槽

查詢資料時,可以查詢指定分割槽上的資料:

select * from table_name partition(分割槽名稱)

select * from table_name subpartition(分割槽名稱)

2)**分割槽

把1個分割槽分成2個分割槽

alter tabletable_namesplit partition原分割槽名稱

at(分割槽範圍值

)   

into(partition新分割槽名稱

1,partition新分割槽名稱

2);3)合併分割槽

把2個分割槽合併成1個分割槽

alter table table_namemerge partitions 原分割槽名稱1,原分割槽名稱2   

into partition 新分割槽名稱

4)新增分割槽

alter  table table_name add partition 分割槽名稱

5)刪除分割槽

alter tabletable_name drop partition partition_name;

6)清空分割槽資料

alter table table_name truncate partition partition_name

索引優點與缺點

優點:1)  建立唯一索引可以保證每行資料的唯一性

2)  可以加快資料檢索速度;

3)  加速表與表之間的連線;

缺點:1)  建立索引和維護索引需要耗費時間,資料量大耗費的時間增加;

2)  索引需要佔物理空間;

3)  表中資料刪除,增加,修改時,索引也需要動態維護;

什麼情況下適合建索引

1)  經常需要搜尋的列,加上索引可以提供速度;

2)  作為主鍵的列,建立唯一索引;

3)  在經常用作連線的列上,這些列主要是一些外來鍵,可以提高連線速度;

4)  在需要根據範圍進行搜尋的列上;

5)  在需要經常排序的列上;

6)  在經常使用在where字句中的列上;

create uniuqe | bitmap index .

on .

(| asc | desc,

| asc | desc,...)

tablespace 

storage 

logging | nologging

compute statistics

nocompress | compress

nosort | reverse

partition | global partition

唯一索引:可以保證每行資料的唯一性

索引1.      索引失效的情況

1)   

沒有查詢條件,或者查詢條件沒有建立索引

2) 在查詢條件上沒有使用引導列

3) 查詢的數量是大表的大部分,應該是

30%以上。

4) 索引本身失效

5) 查詢條件使用函式在索引列上(見12)

6) 對小表查詢

7) 提示不使用索引

8) 統計資料不真實

9) cbo

計算走索引花費過大的情況。其實也包含了上面的情況,這裡指的是表占有的

block

要比索引小。

10)隱式轉換導致索引失效

.這一點應當引起重視

.也是開發中經常會犯的錯誤

. 由於表的字段

tu_mdn

定義為varchar2(20), 

但在查詢時把該字段作為

number

型別以where

條件傳給

oracle,

這樣會導致索引失效

. 11)

對索引列進行運算導致索引失效

,我所指的對索引列進行運算包括(+,

-,*,

/,! 等

) 錯誤的例子:

select * fromtest where id-1=9; 

正確的例子:

select * fromtest where id=10; 

12)使用

oracle

內部函式導致索引失效

.對於這樣情況應當建立基於函式的索引

. 錯誤的例子:

select * fromtest where round(id)=10; 

說明,此時

id的索引已經不起作用了

正確的例子:首先建立函式索引,

create index test_id_fbi_idx on test(round(id)); 

然後select * fromtest where round(id)=10;

這時函式索引起作用了

1,<> 2,

單獨的》,<,(

有時會用到,有時不會

) 13)like "%_" 百分號在前

全域性索引與分割槽索引

表可以按 range hash list 分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle 對於分割槽表上的索引分為 2類,即區域性索引和全域性索引,下面分別對這 2種索引的特點和侷限性做個總結。1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽...

MySQL分割槽表與索引

一 定義 簡而言之就是將一張邏輯上仍然完整的表,在物理儲存的過程中,將表上的資料按某種指定的劃分依據,在物理上存放到多個 表空間 物理檔案上 這樣查詢資料時,不至於每次都掃瞄整張表而只是從當前的分割槽查到所要的資料,這樣大大提高了資料查詢的速度。優點 缺點 二 分割槽表的原理 其實對儲存引擎來說,底...

oracle 分割槽和分割槽索引

1 分割槽分類 range分割槽,hash分割槽,list分割槽,復合分割槽,間隔分割槽,system分割槽 2 range分割槽 區域分割槽,就是按照定義的區域進行分割槽 語法 create table partition by range field partition p1 values le...