程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLSerer---索引全攻略

SQLSerer---索引全攻略

編輯:關於SqlServer
 索引問題
  
  一 概述
  
   可以利用索引快速訪問數據庫表中的特定信息。索引是對數據庫表中一個或多個列的值進行排序的結構。
   索引提供指針以指向存儲在表中指定列的數據值,然後根據指定的排序次序排列這些指針。
   數據庫使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的值,
   然後跟隨指針到達包含該值的行
  
  
  二 索引的兩種類型:
  
  聚集索引=簇集索引
  
  聚集索引基於數據行的鍵值在表內排序和存儲這些數據行。由於數據行按基於聚集索引鍵的排序次序存儲,
  因此聚集索引對查找行很有效。每個表只能有一個聚集索引,因為數據行本身只能按一個順序存儲。
  數據行本身構成聚集索引的最低級別。
  
  只有當表包含聚集索引時,表內的數據行才按排序次序存儲。如果表沒有聚集索引,
  則其數據行按堆集方式存儲。
  
  聚集索引對於那些經常要搜索范圍值的列特別有效。使用聚集索引找到包含第一個值的行後,
  便可以確保包含後續索引值的行在物理相鄰。例如,如果應用程序執行的一個查詢經常檢索某一日期范圍
  內的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然後檢索表中所有相鄰的行,
  直到到達結束日期。這樣有助於提高此類查詢的性能。同樣,如果對從表中檢索的數據進行排序時
  經常要用到某一列,則可以將該表在該列上聚集(物理排序),避免每次查詢該列時都進行排序,
  從而節省成本
  
  非聚集索引
  
  非聚集索引具有完全獨立於數據行的結構。非聚集索引的最低行包含非聚集索引的鍵值,
  並且每個鍵值項都有指針指向包含該鍵值的數據行。數據行不按基於非聚集鍵的次序存儲。
  
  在非聚集索引內,從索引行指向數據行的指針稱為行定位器。
  行定位器的結構取決於數據頁的存儲方式是堆集還是聚集。對於堆集,行定位器是指向行的指針。
  對於有聚集索引的表,行定位器是聚集索引鍵。
  只有在表上創建了聚集索引時,表內的行才按特定的順序存儲。這些行就基於聚集索引鍵按順序存儲。
  如果一個表只有非聚集索引,它的數據行將按無序的堆集方式存儲
  非聚集索引可以建多個,兩者都能改善查詢性能
  
  非聚集索引與聚集索引一樣有 B 樹結構,但是有兩個重大差別:
  數據行不按非聚集索引鍵的順序排序和存儲。
  非聚集索引的葉層不包含數據頁。
  相反,葉節點包含索引行。每個索引行包含非聚集鍵值以及一個或多個行定位器,
  這些行定位器指向有該鍵值的數據行(如果索引不唯一,則可能是多行)。
  非聚集索引可以在有聚集索引的表、堆集或索引視圖上定義
  
  
  另外
  唯一索引
  
  唯一索引可以確保索引列不包含重復的值。在多列唯一索引的情況下,該索引可以確保索引列中每個值組
  合都是唯一的。唯一索引既是索引也是約束。
  
  復合索引
  索引項是多個的就叫組合索引,也叫復合索引。復合索引使用時需要注意索引項的次序。
  
  二 索引的創建
  
  有兩種方法可以在 SQL Server 內定義索引: CREATE INDEX 語句和CREATE TABLE 語句
  
  CREATE TABLE支持在創建索引時使用下列約束:
  
  PRIMARY KEY 創建唯一索引來強制執行主鍵
  UNIQUE 創建唯一索引
  CLUSTERED 創建聚集索引
  NONCLUSTERED 創建非聚集索引
  
  注: 1 定義索引時,可以指定每列的數據是按升序還是降序存儲。如果不指定,則默認為升序
   2 支持在計算列上創建索引
   3 為索引指定填充因子
   可標識填充因子來指定每個索引頁的填滿程度。索引頁上的空余空間量很重要,
   因為當索引頁填滿時,系統必須花時間拆分它以便為新行騰出空間。
  
  
  三 索引的維護語句
  
  DBCC DBREINDEX 重建指定數據庫中表的一個或多個索引
  DBCC INDEXFRAG  整理指定的表或視圖的聚集索引和輔助索引碎片
  
  比較
  
   速度 兼容性 日志影響 數據訪問影響 額外磁盤空間
  DBCC 最快 最好 大,
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved