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...