sql server中關于索引?Sql server表在創建主鍵時會默認創建一個聚集索引,擁有唯一特性,并且這個索引以主鍵為名,故稱為主鍵索引,下面我們就來說一說關于sql server中關于索引?我們一起去了解并探讨一下這個問題吧!
Sql server表在創建主鍵時會默認創建一個聚集索引,擁有唯一特性,并且這個索引以主鍵為名,故稱為主鍵索引!
索引的簡介:
索引分為聚集索引和非聚集索引,數據庫中的索引類似于一本書的目錄,在一本書中通過目錄可以快速找到你想要的信息,而不需要讀完全書。
索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間 。
但是索引對于提高查詢性能也不是萬能的,也不是建立越多的索引就越好。索引建少了,用 WHERE 子句找數據效率低,不利于查找數據。索引建多了,不利于新增、修改和删除等操作,因為做這些操作時,SQL SERVER 除了要更新數據表本身,還要連帶立即更新所有的相關索引,而且過多的索引也會浪費硬盤空間。
建立索引的原則:
1) 定義主鍵的數據列一定要建立索引(會自動建立主鍵索引)。
2) 定義有外鍵的數據列一定要建立索引。
3) 對于經常查詢的數據列最好建立索引。
4) 對于需要在指定範圍内的快速或頻繁查詢的數據列;
5) 經常用在WHERE子句中的數據列。
6) 經常出現在關鍵字order by、group by、distinct後面的字段,建立索引。如果建立的是複合索引,索引的字段順序要和這些關鍵字後面的字段順序一緻,否則索引不會被使用。
7) 對于那些查詢中很少涉及的列,重複值比較多的列不要建立索引。
8) 對于定義為text、image和bit的數據類型的列不要建立索引。
9) 對于經常存取的列避免建立索引
9) 限制表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作。
10) 對複合索引,按照字段在查詢條件中出現的頻度建立索引。在複合索引中,記錄首先按照第一個字段排序。對于在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此隻有複合索引的第一個字段出現在查詢條件中,該索引才可能被使用,因此将應用頻度高的字段,放置在複合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。
索引的分類:
索引就類似于中文字典前面的目錄,按照拼音或部首都可以很快的定位到所要查找的字。
唯一索引(unique):
每一行的索引值都是唯一的(創建了唯一約束,系統将自動創建唯一索引)
主鍵索引:
當創建表時指定的主鍵列,會自動創建以主鍵(或者以表名拼接而來的)作為名稱的索引(聚集索引),并且擁有唯一的特性。
聚集索引(clustered):
聚集索引就相當于使用字典的拼音查找,因為聚集索引存儲記錄是物理上連續存在的,即拼音 a 過了後面肯定是 b 一樣。
非聚集索引(nonclustered):
非聚集索引就相當于使用字典的部首查找,非聚集索引是邏輯上的連續,物理存儲并不連續。
PS:聚集索引一個表隻能有一個,而非聚集索引一個表可以存在多個。
創建索引的優缺:
優點:
1.通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
2.可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
3.可以加速表和表之間的連接,特别是在實現數據的參考完整性方面特别有意義。
4.在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5.通過使用索引,可以在查詢的過程中,使用優化隐藏器,提高系統的性能。
缺點:
1.創建索引和維護索引要耗費時間,這種時間随着數據量的增加而增加。
2.索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
3.當對表中的數據進行增加、删除和修改的時候,索引也要動态的維護,這樣就降低了數據的維護速度。
擴展:主鍵和唯一索引都要求值唯一,但是它們還是有區别的:①.主鍵是一種約束,唯一索引是一種索引;②.一張表隻能有一個主鍵,但可以創建多個唯一索引;③.主鍵創建後一定包含一個唯一索引,唯一索引并一定是主鍵;④.主鍵不能為null,唯一索引可以為null;⑤.主鍵可以做為外鍵,唯一索引不行;
索引的操作:
創建語法:
CREATE [索引類型] INDEX 索引名稱 ON 表名(列名)
創建索引實例:1、聚集索引 create clustered index index_name on table_name (cloumn_name);
2、非聚集索引 create nonclustered index index_name on table_name (cloumn_name);
3、唯一索引 create unique index index_name on table_name(cloumn_name)
删除索引方法:可利用ALTER TABLE或DROP INDEX語句來删除索引。類似于CREATE INDEX語句,DROP INDEX可以在ALTER TABLE内部作為一條語句處理
語法如下:
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
其中,前兩條語句是等價的,删除掉table_name中的索引index_name。
第3條語句隻在删除PRIMARY KEY索引時使用,因為一個表隻可能有一個PRIMARY KEY索引,因此不需要指定索引名。如果沒有創建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL将删除第一個UNIQUE索引。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!