SQL server 數據庫之“索引”詳解
數據庫中的索引與書籍中的目錄類似,索引使SQL Server編排數據的內部方法,它為SQL Server提供一種方法來編排查詢數據的路由。
索引頁是數據中存儲索引的數據頁。索引頁存放檢索數據行的關鍵字頁及該數據行的地址指針。通過使用索引,可以大大提高數據庫的檢索速度、改善數據庫性能。
索引的分類
1、唯一索引
唯一索引不允許兩行具有相同的索引值。創建了唯一約束,將自動創建唯一索引。盡管唯一索引有助於找到信息,但是為了獲得最佳性能,建議使用主鍵約束。
2、主鍵索引
在數據庫關系圖中為表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型。
主鍵索引要求主鍵中的每個值時唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問數據。
在聚集索引中,表中各行的物理順序與鍵值的邏輯(索引)順序相同。
4、非聚集索引
非聚集索引建立在索引頁上,在查詢數據時可以從索引中找到記錄存放的位置。非聚集索引使表中各行數據存放的物理順序與鍵值的邏輯順序不匹配,聚集索引比非聚集索引有更快的數據訪問速度。例如,按筆畫排序的索引就是非聚集索引,“1”畫的字(詞)對應的頁碼可能比“3”畫的字(詞)對應的頁碼大(靠後)。
在SQL Server中,一個表只能創建一個狙擊索引,但可以將多個非聚集索引。設置某列為主鍵,該列就默認為聚集索引。
5、復合索引
在創建索引時,並不是只能對其中一列創建索引,與創建主鍵一樣,可以將多個列組合為索引,這種索引稱為符合索引。
6、全文索引
全文索引使一種特殊類型的基於標記的功能性索引,由SQL Server中全文引擎服務創建和維護。全文索引主要用於大量文本中搜索字符串,此時使用全文索引的效率將大大高於使用T-SQL的LIKE關鍵字的效率。
由於SQL server 圖形化操作,創建索引比較簡單,就略過創建步驟了,創建索引後,可以像查字典時選擇拼音方式或筆畫方式一樣,指定SQL server數據查詢的索引查詢方式,T-SQL語句如下:
select * from xueyuan #指定查詢的表 with (index=ix_name) #指定要依據的索引 where 學員姓名 like ‘孫%‘ #查詢條件
雖然可以指定SQL server 按哪個索引進行查詢,但一般不需要我們人工指定,SQL server 將會根據所創建的索引,自動優化查詢。
使用索引可加快數據檢索速度,但為每個列都建立索引沒有必要。因為索引自身也需要維護,並且占用一定的資源,可以按照以下標準選擇建立索引的列。
- 頻繁搜索的列。
- 經常用於查詢選擇的列。
- 經常排序、分組的列。
- 經常用於連接的列(主鍵/外鍵)。
不要使用下面的列創建索引。
- 僅包含幾個不同值得列。
- 表中僅包含幾行,為小型表創建索引可能不太劃算,因為SQL Server在索引中搜索數據所花的時間比在表中逐行搜索所花的時間更長。
在SQL 語句中,特別是在select語句中正確使用索引可以大大提高查詢速度,保證應用程序的運行性能。提供幾條經驗,僅供大家參考:
- 查詢時盡量減少使用“星號”返回全部列,不要返回不需要的列。
- 索引應該盡量小,在字節數小的列上建立索引。
- where 字句中有多個條件表達式時,包含索引列的表達式應置於其他表達式之前。
- 避免在order by 字句中使用表達式。
- 根據業務數據發生頻率,定期重新生成或重新組織索引,進行碎片整理。(因為在SQL server中,索引數據是由系統自動維護的,在增加、刪除和修改數據後,索引數據可能會更新。隨著長期頻繁的數據更新,索引數據會分散在磁盤的不同位置,形成碎片,由此造成查詢速度越來越慢,因此,根據數據更新的頻率,定期刪除原有索引,重新創建相同的索引,讓索引存放在連續的空間中,以此刪除碎片,可提高查詢速度。)
SQL server 數據庫之“索引”詳解