tft每日頭條

 > 圖文

 > sql server中關于索引

sql server中關于索引

圖文 更新时间:2024-12-24 02:25:09

sql server中關于索引?Sql server表在創建主鍵時會默認創建一個聚集索引,擁有唯一特性,并且這個索引以主鍵為名,故稱為主鍵索引,下面我們就來說一說關于sql server中關于索引?我們一起去了解并探讨一下這個問題吧!

sql server中關于索引(SQLserver索引)1

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每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved