索引和約束的區別

2021-09-26 09:23:14 字數 2768 閱讀 5309

constraint

約束被 db2 universal database(db2 udb) 用來對資料業務規則和資料完整性進行實施、維護。約束的作用範圍僅限在當前資料庫,通過檢索『資料庫目錄』和『命令方式』(select * from user_constraints)可以檢視到約束資訊。如果想方便、快捷的訪問約束資訊,control center也是種方式。約束可以被當做資料庫物件來處理,它們具有名稱和關聯模式(creator id)。

約束的五種型別:

一、主鍵約束(primary key constraint)

主鍵建立時缺省會自生成約束,也可通過顯示宣告。

alter table stuinfo add constraint pk_stuno primary key (stuno)

/* 主鍵可以是一列或多列的組合用以唯一標識表中某行資料。*/

二、外來鍵約束(foreign key constraint)

外來鍵建立時缺省會自生成約束,也可通過顯示宣告。

alter table stumarks add constraint fk_stuno foreign key(stuno) references stuinfo(stuno)

/* 主表stuinfo 從表stumarks */

三、檢查約束(check constraint)

alter table stuinfo add constraint ck_stuage check (stuage between 15 and 40)

/* 年齡限制在15-40歲之間 */

四、唯一約束(unique constraint)

alter table stuinfo add constraint uq_stuid unique(stuid)

/* 身份證號唯一 */

五、預設約束(default constraint)

alter table stuinfo add constraint df_stuaddress default (『位址不詳』) for stuaddress

/* 位址資訊不填,預設為位址資訊不詳 */

六、資訊約束(informational constraint)

/* 不是由db2管理器來負責實施sql 編譯器可用它來提高查詢效能 */

index

索引是乙個單獨和物理地並儲存在資料頁上的資料庫結構,它是表中一列或若干列值的集合和相應的指向表中資料值的物理標識資料頁的邏輯指標清單。索引的存在會增加資料庫的儲存空間,也會使插入、修改資料的時間開銷變多(因為索引也要隨之變動)。注:索引可常駐記憶體進行處理

在這些列上建立索引:

在經常需要搜尋的列上,可以加快搜尋速度;在主鍵列上,強制該列的唯一性和組織表中資料的排列結構;在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線速度;在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的;在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序;在經常使用where子句中的列上面建立索引,加快條件的判斷速度。

不應該建立索引的列:

對於在查詢中很少使用和參考的列不應該建立索引。增加索引會降低系統的維護速度和增大空間需求;對於資料值很少的列也不應增加索引。由於這些列的取值很少,例如:人事表的性別列,在查詢結果中,結果集的資料行佔了表中資料行的很大比例,在表中搜尋的資料行的比例很大,索引不能明顯加快檢索速度;對於定義為text, image和bit資料型別的列不應該增加索引。因為這些列的資料量要麼相當大,要麼很少;當修改效能遠遠大於檢索效能時,不應該建立索引。修改效能和檢索效能是互相矛盾 的。索引會提高檢索效能,但是會降低修改效能。

索引的分類–按結構分

索引按照結構可以分為有序索引(ordered index)和雜湊索引(hash index)兩種基本型別。其中有序索引是基於值的順序排序,根據值的排序進行索引值的查詢。而雜湊索引則是基於將值平均分布到若干雜湊桶(hash bucket)。根據雜湊函式確定索引值所在的雜湊桶。

一、有序索引:稠密索引、稀疏索引、多級索引和b+樹索引。

二、雜湊索引:靜態雜湊、雜湊桶、雜湊函式、桶溢位和動態散。

索引的分類–按功能分

一、唯一索引(unique index)和非唯一索引(nonunique index)

create unique index indexname on table tabname(colname)

/* 允許值為空,但不允許存在的值重複 */

二、主鍵索引(primary index)

/* 唯一索引+非空約束=主索引,主鍵建立時會預設自生成索引 */

三、集群索引(clustered index)和非集群索引(nonclustered index)

create index indexname on table tabname(colname desc) cluster

/* desc降序排列,在沒有註明情況下預設是按asc公升序排列 */

集群索引是按物理結構排序的,它會對錶中的資料進行重新排序,所以表中只能有乙個該索引。資料庫管理器會嘗試按照相應鍵在索引頁面中的順序來儲存資料到頁面中。如果對錶進行了重組,那麼會按照索引鍵的順序將資料插入資料頁面中,資料庫管理器不會維護資料的任何順序。

集群索引具有查詢優勢和插入上的疲軟。由於需要保持索引值和資料行的物理順序一致,插入資料時會進行大量遷移,為防止此種情況出現,我們允許聚簇索引存在無序狀態,當聚簇率低於85%時就得進行重組。

db2集群索引的葉結點和非集群索引一樣,都是指向相應資料頁的邏輯指標。即索引資料頁和常規資料頁是嚴格分開的。但是包括oracle,sql server在內的大部分資料庫的聚簇索引的頁結點不是指向資料頁的指標,而是葉結點本身就是資料頁。

mysql索引和約束區別

一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外 ...

索引和約束

索引優點 1.索引使得檢索的資料的速度大大加快 2.建立索引時自動新增了唯一性約束,確保每一條資料的唯一性 3.可以加快表與表之間的鏈結,提高多表查詢的速度 4.在分組和排序子句進行資料彙總的時候,顯著減少查詢中分組和排序的時間。每張表都會有乙個rowid實體地址列,用來唯一標誌一條記錄所在物理 位...

索引和約束

一 雖然索引引用可以提高資料的查詢速度,但是任何事物都有雙刃劍,它也有一些缺點 1 索引會佔據一定的磁碟空間,就像有安筆劃的查詢的目錄的書會比沒有這種目錄的書頁數要多一些一樣。2 索引減慢了資料的插入和刪除速度。因為每次刪除更新資料都要更新索引,乙個表擁有的索引越多則寫操作的平均效能下降越大。cre...