天天看點

ms sql 索引(一)

索引的用途

索引的主要作用就是為加快檢索的速度(效率)。主要是為查詢。這裡的查詢包括表自身的查詢,還包括連接配接查詢。此外,sql的查詢優化器(隐式的)也依賴索引,如果使用索引比不使用索引時效率高,那優化器就會選擇使用索引。

索引可能極大提高檢索的速度。

例如:圖書館的圖書如果無序排放,則要找《水浒傳》這一本書,極有可能會把所有書都翻一遍,當然也有可能會第一本書就是它。如果給圖書館的圖書按書名分列于不同書架,以字母排序,那找到S列書架,然後找Sh,shu,shui,然後找在shui書架中再找hu,然後找zhuan,那麼就會找到這本書。

索引的分類

索引分聚集(聚簇)索引和非聚集(聚簇)索引。

聚集索引:表中的資料的實體順序與排序順序相同,表中可建立且隻可建立一個聚集索引(實體順序)。聚集索引由索引頁構成,索引頁底層稱為葉級,上層稱為非葉級。葉級存放着實際的排序的資料,非葉級存放着排序的索引。以圖書館查找《水浒傳》為例的示意圖:

ms sql 索引(一)

上圖是個示意圖,但不表示聚集索引的正确圖。索引通過B-tree算法來實作,中文的意思是平衡樹,不是二叉樹。

非聚集索引:不在實體順序上排列資料,而是通過排序指針,指針指向資料。

非聚集索引也由索引頁構成,索引頁底層稱為葉級,上層稱為非葉級。葉級存放着的排序的指向實際資料的指針,非葉級存放着排序的索引。

Ms sql存儲結構

Sql server在存儲時,為提高資料庫性能,以盤區為機關向資料庫配置設定空間。一個盤區為8個連續的頁(Page)。頁是資料庫存儲的基本機關。頁大小為8K。一個盤區為8*8=64K。頁分為好幾種頁類型,例如:資料頁,索引頁,映射表頁等。

例如:圖書館的圖書以書架(頁)為機關,每8個書架在一個小隔間(區)。

索引的參數

·FillFactor:設定建立索引時每個索引頁的頁級别中可用空間的比。用來設定索引頁中預留的空間。它是填充因子,設定為100%,表示不留預留白間。對于隻讀表來說,可以設定為100%。設定填充因子的原因就是防止頁分裂。

例如:假設圖書館的6号書架為S系統的書籍,現在擺滿圖書,則它的填充因子(度)為100%,那麼如果圖書館新增加了一本書《三俠劍》,按索引來安排,則它應該放到6号書架,但6号書架已經滿了,那麼可以增加一個書架(頁),這個書架可能挨着6号書架,但也有可能有一定距離,那麼,在查找《三俠劍》時,就要求在兩個書架中查找,可能6号書架中找不到,到新增加的那個書架去找,而這個書架離6号書架較遠,影響了查找的效率。那麼如果6号書架沒有擺滿,而是隻擺了60本書(假設一本書為1%),那麼填充因子(度)為60%。此時當添加《三俠劍》時,可以放到6号書架中,而不必再增加一個額外的書架。

·Pad_Index:設定建立索引時每個索引頁的非頁級别中的可用空間的比。它的值由FillFactor指定。

性能分析(簡)

簡單說明一下,詳細說明在後篇說明。

·showplan_text:設定sql server不執行(on)sql語句,而傳回如何執行語句的詳細資訊。須做為單獨的批處理運作,且不能用在存儲過程中。與它類似的還有showplan_all,它的資訊更詳細。

·statistics io:顯示執行sql語句的磁盤活動量。

輸出項 中文輸出名 含義
Table 表的名稱。
Scan count 掃描計數 執行的索引或表掃描數。
logical reads 邏輯讀取 從資料緩存讀取的頁數。
physical reads 實體讀取 從磁盤讀取的頁數。
read-ahead reads 預讀 為進行查詢而放入緩存的頁數。
lob logical reads Lob邏輯讀取 從資料緩存讀取的 text、ntext、image 或大值類型 (varchar(max)、nvarchar(max)、varbinary(max)) 頁的數目。
lob physical reads Lob實體讀取 從磁盤讀取的 text、ntext、image 或大值類型頁的數目。
Lob read-ahead reads Lob預讀 為進行查詢而放入緩存的 text、ntext、image 或大值類型頁的數目。

·statistics time:顯示分析,編譯,執行sql語句花費的時間(毫秒)。

·DBCC:全名為資料庫控制台指令,即DataBase Console Command。

指令類别 執行 
維護 對資料庫、索引或檔案組進行維護的任務。 
雜項 雜項任務,如啟用跟蹤标志或從記憶體中删除DLL。
資訊 收集并顯示各種類型資訊的任務。
驗證 對資料庫、表、索引、目錄、檔案組或資料庫頁的配置設定進行的驗證操作。

主要介紹幾個:

DBCC ShowContig:顯示指定的表或視圖的資料和索引的碎片資訊。這個指令在高版本sql中推薦由動态管理函數sys.dm_db_index_physical_stats代替。

Dbcc showcontig(表名(id)|索引名(id)|視圖名(id)) with

對于with部分,常用的是tableresults,用于通過表格顯示資訊結果。

DBCC DbReindex:重建立索引。

部落格園大道至簡

http://www.cnblogs.com/jams742003/

轉載請注明:部落格園