SQLServer之索引

來源:互聯網
上載者:User

  索引(Index)好比書的目錄,當進行檢索時不必掃描整個表,就可以迅速的找到表中的資料。

書要製作目錄可以方便尋找,但也需要紙張來儲存目錄資訊,如果增加或刪除了書的內容,那麼

目錄必定也要做修改,索引與之類似,可以快速檢索,但也需要一定的記憶體開銷以及維護開銷。

  首先先解釋下索引是如何快速找到資料的?

  索引是一個單獨的、物理的分散儲存資料庫結構。它是針對一個表建立的,每個索引

頁面中的行都含有邏輯指標,指向資料庫表中的物理位置。在進行檢索的時候,總是先

檢索索引頁,找到指向所需資料的指標,然後通過該指標找到資料頁面讀取資料,提高查詢效率。

  建立索引頁必然要佔用一部分記憶體,同時增加、刪除、修改的時候也要花費時間去維護索引,

所以選擇合適的列建立索引是很必要的。

  那麼該選擇怎樣的列建立索引呢?

1、主鍵列:存取最常用的列便是主鍵。

2、外鍵列:外鍵通常要與其它表進行關聯查詢,將其設定為索引,可以更加快速的進行串連

3、經常被作為條件檢索的列和按排序頻繁檢索的列。

  選擇好列還要遵循一定的建立索引原則,如下:

1、資料量很少的表不要建立索引,因為資料太少,索引的效果不明顯,還得花時間維護。

2、對檢索的欄位有很多資料值或空值,為其建立索引,可以大大提高檢索速度。

3、在對錶中的資料進行大量更新時最後先刪除索引在更新,然後在建立索引。

4、在模糊查詢時盡量不要使用like '%某某%' ,而使用like '某%'

5、少用全表索引

  知道原則了,那麼開始建立索引了,一般索引分為叢集索引(簇索引)和非叢集索引(非簇索引),

其建立都是用CREATE INDEX,指示建立叢集索引時要顯示聲明CLUSTERED。

例如對StudentInfo表中的No列和Name列建立降序非叢集索引或叢集索引,可以這樣寫:

CREATE [CLUSTERED] INDEX indexName_stuInfo ON StudentInfo(No,Name DESC)

[CLUSTERED]表示可選,選擇則建立聚集所以。

注意:叢集索引一張表只能建一個,故在對一張表建立叢集索引前要先刪除原來的叢集索引。

如:IF EXISTS(SELECT NAME FROM SYS.INDEXES WHERE NAME ='indexName_stuInfo')

  DROP INDEX StudentInfo.indexName_stuInfo

  GO

  CREATE CLUSTERED INDEX indexName_stuInfo ON  StudentInfo(No,Name DESC)

  GO

 *******************************下回介紹維護索引******************************************** 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.