索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。
優點:
正確的索引會大大提高數據查詢、對結果排序、分組的操作效率。
缺點:
1、存儲空間,每個索引都要空間存儲
2、如果非聚集索引很多,一旦聚集索引改變,那么所有非聚集索引都會跟著變。
3、過多索引會導致優化器優化過程需要評估的組合增多。
4、每個索引都有統計信息,索引越多統計信息越多。
5、更新開銷,一旦一個數據改變,并且改變的列比較多,可能會引起好幾個索引跟著改變。
分類:
聚集索引>>聚集索引基于數據行的鍵值,在表內排序和存儲這些數據行。每個表只能有一個聚集索引,應為數據行本分只能按一個順序存儲。
在聚集索引中,表中各行的物理順序與索引鍵值的邏輯(索引)順序相同。聚集索引通常可加快UPDATE和DELETE操作的速度,因為這兩個操作需要讀取大量的數據。創建或修改聚集索引可能要花很長時間,因為執行這兩個操作時要在磁盤上對表的行進行重組。
非聚集索引>>因為一個表中只能有一個聚集索引,如果需要在表中建立多個索引,則可以創建為非聚集索引。表中的數據并不按照非聚集索引列的順序存儲,但非聚集索引的索引行中保存了非聚集鍵值和行定位器,可以快捷地根據非聚集鍵的值來定位記錄的存儲位置。
非聚集索引,本質上來說也是聚集索引的一種.非聚集索引并不改變其所在表的物理結構,而是額外生成一個聚集索引的B樹結構,但葉子節點是對于其所在表的引用,這個引用分為兩種,如果其所在表上沒有聚集索引,則引用行號。如果其所在表上已經有了聚集索引,則引用聚集索引的頁.
使用原則:
1:不要索引數據量不大的表,對于小表來講,表掃描的成本并不高。
2:不要設置過多的索引,在沒有聚集索引的表中,最大可以設置249個非聚集索引,過多的索引首先會帶來更大的磁盤空間,而且在數據發生修改時,對索引的維護是特別消耗性能的。
3:合理應用復合索引,有某些情況下可以考慮創建包含所有輸出列的覆蓋索引。
4:對經常使用范圍查詢的字段,可能考慮聚集索引。
5:避免對不常用的列,邏輯性列,大字段列創建索引。
文章列表