資料庫建立索引的條件和注意事項

2021-10-13 19:15:49 字數 1315 閱讀 2568

資料庫中建立索引是為了提公升查詢效能,但是建立索引也會降低修改效能。

建立索引也有不利的一面:

建立索引和維護索引要耗費時間,耗費的時間隨著資料量的增加而增加;

索引佔據物理空間。除了資料表佔據物理空間以外,每乙個索引都會佔據一定的物理空間。如果建立聚簇索引,那麼需要的空間就會更大;如果非聚簇索引很多,一但聚簇索引改變,那麼所有非聚簇索引也會跟這變;

當對表中的資料進行增加、刪除和修改的視乎,索引也要動態的維護,一旦乙個資料改變,並且改變的列比較多,可能會引起好幾個索引跟著改變,這樣就降低了資料的維護速度;

每個索引都伴隨著統計資訊,用於sql優化器執行查詢時選擇執行路徑。索引越多統計資訊越多,但過多的索引會導致優化器優化過程需要評估的組合增多。建立索引的時候,應該仔細考慮在哪些列上可以建立索引,哪些列上不能建立索引。

索引可以分為聚簇索引和非聚簇索引。聚簇索引通過樹形結構重排表中的資料來提高資料的訪問速度,非聚簇索引則通過維護表中的資料指標來提高資料的索引。 每乙個表只能有乙個聚簇索引,因為表中資料的物理順序只能有乙個(按序排列表中的資料,只有一種排列方法,筆者注);

在建立任何非聚簇索引之前都應當先建立聚簇索引。表中行的物理順序和聚簇索引中行的物理順序是相同的,建立聚簇索引會改變表中行的物理順序,資料行按照一定的順序排列(b+樹),並且自動維護。

關鍵值的唯一性要麼使用unique關鍵字明確維護,要麼由乙個內部的唯一識別符號明確維護。這些識別符號是系統自己使用的,使用者不能訪問。

聚簇索引的平均大小約是資料表的百分之五,但是實際的聚簇索引的大小常常根據索引項的大小變化而變化。

在索引建立的過程中,sql server臨時使用當前資料庫的磁碟空間,當建立聚簇索引時,需要1.2倍的表空間大小。因此,需要保證有足夠的磁碟空間用於建立聚簇索引。

主鍵約束是一種保持資料完整性的邏輯,它限制表中的記錄有相同的主鍵記錄。在建立主鍵約束時,系統會自動建立乙個唯一性的聚簇索引。在邏輯上,主鍵約束是一種重要的結構;但在物理結構上,與主鍵約束相對應的結構是唯一性的聚簇索引。換句話說,物理實現上其實不存在主鍵約束,只存在唯一性的聚簇索引。因此,當使用約束建立索引時,索引的型別和特徵基本上都已經確定了,由使用者定製的餘地比較小。

當在表上定義主鍵或者唯一性鍵約束時,如果表中已經有了使用create index語句建立的標準索引,那麼主鍵約束或者唯一性鍵約束建立的索引將會覆蓋之前建立的標準索引。這說明了主鍵約束或者唯一性鍵約束建立的索引優先順序高於create index語句建立的索引。

索引可以包含乙個、兩個、甚至更多個列。兩個列或者以上列上建立的索引被稱作復合索引。

資料庫的索引原理和注意事項

索引的種類 1 普通索引 2 唯一索引 3 主鍵索引 4 對左匹配聯合索引 5 全文索引。也可以分為 聚簇索引與非聚簇索引 聚簇索引 葉節點 資料節點 直接找到資料,跟線性鍊錶類似 適合查詢,排序 非聚簇索引 葉節點 索引節點 資料塊 間接找到資料,跟非線性鍊錶類似 適合 1 某列常用於集合函式 如...

資料庫學習之建立索引的注意事項

1 索引要建立在經常進行select操作的字段上。這是因為,如果這些列很少用到,那麼有無索引並不能明顯改變查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。2 索引要建立在值比較唯一的字段上。這樣做才是發揮索引的最大效果。比如主鍵的id欄位,唯一的名字name欄位等等。如果索...

建立資料庫 mysql資料庫建立注意事項

mysql 想必大家都不會陌生吧 是我學習中第乙個接觸的的資料庫 已學習就很快上手的 這是乙個關係型資料庫 不懂什麼是關係型資料庫 啊哈哈哈 現在知道啦 因為自己學習了 非關係型資料庫 redis 關係型資料庫 顧名思義就是有關係啦 個人理解就是 乙個庫下的所有表 都可以產生關係 關係型資料庫是我們...