SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間
聚集索引的物理存儲是連續的,非聚集索引的物理存儲不是連續的,但邏輯結構是連續的
什麼情況下設置索引
動作描述
使用聚集索引
使用非聚集索引
外鍵列
應
應
主鍵列
應
應
列經常被分組排序(order by)
應
應
返回某范圍內的數據
應
不應
小數目的不同值
應
不應
大數目的不同值
不應
應
頻繁更新的列
不應
應
頻繁修改索引列
不應
應
一個或極少不同值
不應
不應
建立索引的原則:
1) 定義主鍵的數據列一定要建立索引。
2) 定義有外鍵的數據列一定要建立索引。
3) 對於經常查詢的數據列最好建立索引。
4) 對於需要在指定范圍內的快速或頻繁查詢的數據列;
5) 經常用在WHERE子句中的數據列。
6) 經常出現在關鍵字order by、group by、distinct後面的字段,建立索引。如果建立的是復合索引,索引的字段順序要和這些關鍵字後面的字段順序一致,否則索引不會被使用。
7) 對於那些查詢中很少涉及的列,重復值比較多的列不要建立索引。
8) 對於定義為text、image和bit的數據類型的列不要建立索引。
9) 對於經常存取的列避免建立索引
9) 限制表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作。
10) 對復合索引,按照字段在查詢條件中出現的頻度建立索引。在復合索引中,記錄首先按照第一個字段排序。對於在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此只有復合索引的第一個字段出現在查詢條件中,該索引才可能被使用,因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。
語法:
創建索引的語法:
CREATE [UNIQUE][CLUSTERED | NONCLUSTERED] INDEX index_name
ON {table_name | view_name} [WITH [index_property [,....n]]
說明:
UNIQUE: 建立唯一索引。
CLUSTERED: 建立聚集索引。
NONCLUSTERED: 建立非聚集索引。
Index_property: 索引屬性。
UNIQUE索引既可以采用聚集索引結構,也可以采用非聚集索引的結構,如果不指明采用的索引結構,則SQL Server系統默認為采用非聚集索引結構。
刪除索引語法:
DROP INDEX table_name.index_name[,table_name.index_name]
說明:table_name: 索引所在的表名稱。
index_name : 要刪除的索引名稱。
顯示索引信息:
使用系統存儲過程:sp_helpindex 查看指定表的索引信息。
執行代碼如下:
Exec sp_helpindex book1;