索引:索引是與表或視圖的頁的集合,用於加速從表中檢索行或用於強制實施唯一性。
叢集索引:通過物理上的順序進行排列而建立的索引。
非叢集索引:通過索引表(相當於書的目錄)的方法建立的索引。
SQL資料訪問方式:一是:表掃描;二是:使用索引。
叢集索引可以看作是英文字典,字典從a-z排序,當我們需要尋找某個單詞時,如:student,這時就可
以定位到是字典的後半部分。
非叢集索引可以看作是書的目錄,通過目錄標明某文章在哪一頁就定位到哪一頁。
由於叢集索引確定了實現儲存表行的順序,所以每個表只能有一個叢集索引,表中的行不能以多種順序
儲存。
資料類型:ntext text varchar(max) nvarchar(max) varbinary(max) xml image不可用作叢集索引,
非叢集索引的鍵。
使用叢集索引場合:
1、使用between, >, >=, <, <=之類的運算子返回一系列值。
2、返回使用order by 或 group by 子句排序的資料。
3、返回使用join子句合并的資料,一般是外鍵列
4、返回大型結果集
如果索引表有叢集索引,則叢集索引中定義的一列或多列將自動追加到表上每一個非叢集索引的最後,
這樣無需在非叢集索引的定義中指定叢集索引列即可產生覆蓋查詢。如:表有C列的叢集索引,則B列和A
列的非叢集索引將以BAC列作為其索引值。
使用非叢集索引的場合:
1、當使用者需要以多種方式搜尋資料時,如:使用者可能頻繁搜尋學號,姓名。可建立非叢集索引為姓名s
,叢集索引為學號
2、如果你表已經有了叢集索引,並且你需要索引另一個列,這時只能選擇使用非叢集索引。
3、當索引包含查詢中的所有列時,你將能最大限度地提高效能,覆蓋範圍是指查詢中所涉及的索引能
支援的列數。
4、你希望使用join, group by子句提高查詢效能,應用對串連,分組操作的列建立多個非叢集索引,
並對所有的外鍵建立叢集索引。
5、表更新頻率較低,但是包含大量資料。
6、不會返回大量結果。
7、需要對包含多個不同值(如姓和名)的列進行索引。非叢集索引最適合於資料選擇性從高度可選到
唯一的列。