資料庫 在外鍵上建立索引

2021-09-22 16:50:42 字數 641 閱讀 1008

出處:

在oracle資料庫中,當對父表(上面例子中的dep表)進行更新的時候,如果在子表(上面例子中的student表)中的外來鍵沒有使用索引,則在更新的過程中整個子表將被鎖定,而往往實際上並不需要鎖定整個子表,而僅僅需要鎖定子表中的幾條記錄。這樣就會大大影響資料庫訪問的併發性,甚至有可能造成死鎖的情況。

除了鎖表的問題之外,乙個沒有使用索引的外來鍵在下面兩種情況下表現的也十分糟糕:

當使用on delete cascade刪除父表中的記錄時,如果在子表中的外來鍵沒有使用索引,則當執行該操作時,會對子表進行全表的掃瞄,而事實上這個全表的掃瞄是不需要的。更壞的情況是,如果刪除多個父表中的記錄,每刪除一條記錄則會進行一次全表掃瞄,可想而知,對於效能的影響是多麼的大!

對於父表和子表的連線查詢,情況也是類似的。當進行這種連線查詢時,如果不對外鍵使用索引則會發現查詢的速度大大降低。

這下你一定明白了為什麼需要在外鍵上使用索引的重要意義了,不過你還是堅持不想使用索引的話,也可以,不過必須保證下面三種情況同時滿足:

(1)不從父表中刪除記錄

(2)不更新父表中的主鍵的值

(3)一般不進行父表和子表的連線查詢

如果你覺得可以滿足上面的全部三個條件,那麼可以不必為外來鍵新增索引。但一般來講,上面的三種情況很難滿足,若不使用索引將會付出很大的代價。

MySQL 新建資料庫 建立索引 建立外來鍵

本文通過命令運算元據庫的方式,以簡單會員表為例,為讀者簡述資料表的簡單設計及操作。1.新建資料庫 create database 資料庫名 2.新建資料表 tab1.會員使用者名稱表 create table w member mid int 20 not null primary key auto...

資料庫索引鍵uk 資料庫索引實驗

6 綜合型實驗專案索引和資料完整性 一 建立索引 對yggl 資料庫的 employees 表中的departmentid 列建立索引。create index ind dep onemployees departmentid 在employees 表的name 列和address 列上建立復合索引...

資料庫建立索引

建立索引 學生學號建立聚集索引 create unique clustered index ix student id on student studentid 規則 create unique clustered nonclustered index 索引名 on 表名 檢視名 索引列名,asc ...