標籤:
SQLServer索引
1.聚集和非叢集索引
叢集索引:根據叢集索引進行排序,非叢集索引因為不根據索引鍵排序,所以叢集索引比非叢集索引快(一個表只有一個叢集索引)
2.唯一索引和非唯一索引
唯一索引時值不能重複
建立索引的原則:
1) 定義主鍵的資料列一定要建立索引。
2) 定義有外鍵的資料列一定要建立索引。
3) 對於經常查詢的資料列最好建立索引。
4) 對於需要在指定範圍內的快速或頻繁查詢的資料列;
5) 經常用在WHERE子句中的資料列。
6) 經常出現在關鍵字order by、group by、distinct後面的欄位,建立索引。如果建立的是複合索引,索引的欄位順序要和這些關鍵字後面的欄位順序一致,否則索引不會被使用。
7) 對於那些查詢中很少涉及的列,重複值比較多的列不要建立索引。
8) 對於定義為text、image和bit的資料類型的列不要建立索引。
9) 對於經常存取的列避免建立索引
9) 限制表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響資料的更新操作。
10) 對複合索引,按照欄位在查詢條件中出現的頻度建立索引。在複合索引中,記錄首先按照第一個欄位排序。對於在第一個欄位上取值相同的記錄,系統再按照第二個欄位的取值排序,以此類推。因此只有複合索引的第一個欄位出現在查詢條件中,該索引才可能被使用,因此將應用頻度高的欄位,放置在複合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。
文法
1.建立索引的文法:
CREATE [UNIQUE][CLUSTERED | NONCLUSTERED] INDEX index_name
ON {table_name | view_name} [WITH [index_property [,....n]]
UNIQUE: 建立唯一索引。
CLUSTERED: 建立叢集索引。
NONCLUSTERED: 建立非叢集索引。
Index_property: 索引屬性。
UNIQUE索引既可以採用叢集索引結構,也可以採用非叢集索引的結構,如果不指明採用的索引結構,則SQL Server系統預設為採用非叢集索引結構。
2.刪除索引文法:
DROP INDEX table_name.index_name[table_name.index_name]
說明:table_name: 索引所在的表名稱。
index_name : 要刪除的索引名稱。
3.顯示索引資訊:
使用系統預存程序:sp_helpindex [table_name] 查看指定表的索引資訊。
舉個例子:有個D表,有D1(number),D2(varchar2),D3(number) 三個欄位,其中D1,D2欄位有作了索引。
select * from D ;--這時候儘管表中有索引,但是不會走索引,會全表掃描。
select D1 from D ;--這時候會走D1索引;
select * from D where D1=1,--這時候會走D1索引
select * from D where D2=1,--這時候不會走索引。儘管D2有索引,但是D2是字元型,where條件中是數值型,加上單引就可以走D2索引。
SQLServer索引