標籤:style blog http io ar 使用 sp strong 檔案
1. 索引概念
索引用於快速尋找在某個列中某個特定值的行,不使用索引,資料庫必須從第1條記錄開始讀完整個表,知道找出需要的行。表越大,查詢資料所花費的時間越多。如果表中查詢的列有索引,資料庫能快速到達一個位置去尋找資料,而不必遍曆所有資料。
索引是一個單獨的、儲存在磁碟上的資料庫結構,包含對資料表裡所有記錄的引用指標。使用索引用於快速找出一個或多個列中有特定值的行,對相關列使用索引是降低查詢操作時間的最佳途徑。索引包含由表或試圖中的一列或多列產生的鍵。
索引的優點:
◊ 通過建立唯一索引,可以保證資料庫表中每一行資料的唯一性。
◊ 可以大大加快資料的查詢速度,這也是建立索引的最主要的原因。
◊ 實現資料的參照完整性,可以加速表和表之間的串連。
◊ 在使用分組和排序子句進行資料查詢時,可以顯著減少查詢中分組和排序的時間。
索引的缺點:
◊ 建立索引和維護索引需要耗費時間,並且隨著資料量的增加所消耗的時間會增加。
◊ 索引需要佔用磁碟空間,除了資料表占資料空間之外,每一個索引還要佔用一定的物理空間。如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案大小。
◊ 當對錶中的資料進行添加、修改和刪除的時候,索引需要動態維護,這樣降低了資料的維護速度。
2. 索引的分類
SQL Server中索引有兩種:叢集索引和非叢集索引。它們的區別是在物理資料的儲存方式上。
2.1> 叢集索引
叢集索引基於資料行的索引值,在表內排序和儲存這些資料行。每個表只能有一個叢集索引,因為資料行本身只能按一個順序儲存。
建立叢集索引時需要考慮的幾個因素:
◊ 每個表只能有一個叢集索引
◊ 表中的物理順序和索引中行的物理順序是相同的,建立任何非叢集索引之前要首先建立叢集索引,這是因為叢集索引改變了表中行的物理順序。
◊ 關索引值的唯一性使用UNIQUE關鍵字或者由內部的唯一識別碼明確維護。
◊ 在索引的建立過程中,SQL Server臨時使用當前資料庫的磁碟空間,所以要保證有足夠的空間建立叢集索引。
2.2> 非叢集索引
非叢集索引具有完全獨立於資料行的結構,使用非叢集索引不用將物理資料頁的資料按列排序。非叢集索引包含索引索引值和指向表資料存放區位置的行定位器。
可以對錶或索引檢視表建立多個非叢集索引。設計非叢集索引是為了改善經常使用的、沒有建立叢集索引的查詢的效能。
查詢最佳化工具在尋找資料值時,先尋找非叢集索引以找到資料值在表中的位置,然後直接從該位置檢索資料。這使得非叢集索引成為完全符合查詢的最佳選擇,因為索引中包含所尋找的資料值在表中的精確位置的項。
考慮使用非叢集索引的查詢情況:
◊ 使用JOIN或GROUP BY子句。應為串連和分組操作中所涉及的列建立多個非叢集索引,為任何外鍵列建立叢集索引。
◊ 包含大量唯一值的欄位。
◊ 不返回大型結果集的查詢。建立篩選索引以覆蓋從大型表中返回定義完善的行子集的查詢。
◊ 經常包含在查詢的搜尋條件中的列。
3. 建立索引
SQL Server中建立索引的兩中方法:在SQL Server Management Studio的物件總管中,通過圖形化工具建立或使用T-SQL語句建立。
3.1> 使用SQL Server Management Studio物件總管建立
◊ 在【物件總管】中,展開【資料庫】找到需要建立索引的資料表節點,展開該節點下的子節點,右擊【索引】節點,在彈出的捷徑功能表中選擇【建立索引】->【非叢集索引】。
◊ 在開啟的【建立索引】介面選擇需要建立索引的列,進而建立索引。
Sql Server系列:索引基礎