資料庫索引的建立原則

2021-06-27 16:57:06 字數 1312 閱讀 8468

基於合理的資料庫設計,經過深思熟慮後為表建立索引,是獲得高效能資料庫系統的基礎。而未經合理分析便新增索引,則會降低系統的總體效能。索引雖然說提高了資料的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間。

是否要為表增加索引、索引建立在那些欄位上,是建立索引前必須要考慮的問題。解決此問題的乙個比較好的方法,就是分析應用程式的業務處理、資料使用,為經常被用作查詢條件、或者被要求排序的字段建立索引。基於優化器對sql語句的優化處理,我們在建立索引時可以遵循下面的一般性原則:

(1)為經常出現在關鍵字order by、group by、distinct後面的字段,建立索引。

在這些欄位上建立索引,可以有效地避免排序操作。如果建立的是復合索引,索引的字段順序要和這些關鍵字後面的字段順序一致,否則索引不會被使用。

(2)在union等集合操作的結果集字段上,建立索引。其建立索引的目的同上。

(3)為經常用作查詢選擇的字段,建立索引。

(4)在經常用作表連線的屬性上,建立索引。

(5)考慮使用索引覆蓋。對資料很少被更新的表,如果使用者經常只查詢其中的幾個字段,可以考慮在這幾個欄位上建立索引,從而將表的掃瞄改變為索引的掃瞄。

除了以上原則,在建立索引時,我們還應當注意以下的限制:

(1)限制表上的索引數目。

對乙個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響資料的更新操作。

(2)不要在有大量相同取值的字段上,建立索引。

在這樣的字段(例如:性別)上建立索引,字段作為選擇條件時將返回大量滿足條件的記錄,優化器不會使用該索引作為訪問路徑。

(3)避免在取值朝乙個方向增長的字段(例如:日期型別的字段)上,建立索引;對復合索引,避免將這種型別的字段放置在最前面。

由於欄位的取值總是朝乙個方向增長,新記錄總是存放在索引的最後乙個葉頁中,從而不斷地引起該葉頁的訪問競爭、新葉頁的分配、中間分支頁的拆分。此外,如果所建索引是聚集索引,表中資料按照索引的排列順序存放,所有的插入操作都集中在最後乙個資料頁上進行,從而引起插入「熱點」。

(4)對復合索引,按照欄位在查詢條件中出現的頻度建立索引。

在復合索引中,記錄首先按照第乙個字段排序。對於在第乙個欄位上取值相同的記錄,系統再按照第二個欄位的取值排序,以此類推。因此只有復合索引的第乙個字段出現在查詢條件中,該索引才可能被使用。

因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。

(5)刪除不再使用,或者很少被使用的索引。

表中的資料被大量更新,或者資料的使用方式被改變後,原有的一些索引可能不再被需要。資料庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。

資料庫索引建立原則

索引並不是越多越好,在合適的字段上建立合適的索引。索引的建立會影響寫資料的操作速度,會占用更多的磁碟空間。所以建立索引最好是在where條件內作為查詢條件。當然也要注意一些細節 1 比如復合索引字首原則,當我們建立a b c三個復合索引時,當我們使用ab或者a或者abc時,索引會被用到,但是使用bc...

資料庫建立索引的原則

鐵律一 天下沒有免費的午餐,使用索引是需要付出代價的。索引的優點有目共睹,但是,卻很少有人關心過採用索引所需要付出的成本。若資料庫管理員能夠對索引所需要付出的代價有乙個充分的認識,也就不會那麼隨意到處建立索引了。仔細數數,其實建立索引的代價還是蠻大的。如建立索引和維護索引都需要花費時間與精力。特別是...

資料庫建立索引的原則

鐵律一 天下沒有免費的午餐,使用索引是需要付出代價的。索引的優點有目共睹,但是,卻很少有人關心過採用索引所需要付出的成本。若資料庫管理員能夠對索引所需要付出的代價有乙個充分的認識,也就不會那麼隨意到處建立索引了。仔細數數,其實建立索引的代價還是蠻大的。如建立索引和維護索引都需要花費時間與精力。特別是...