談“索引”

談“索引”
(一)創建索引
對於數據庫中較小的表來說,使用掃描原始數據的方法可以工作很好,然而,當數據量變大時,就必須使用索引來提高數據檢索的速度。
在考慮索引的創建時,需要注意的是:提高查找速度與提高更新速度是相互矛盾的。索引可以極大地提高讀取數據的速度,但在寫數據時,它們卻會帶來額外的工作。
使用圖形界面工具創建和管理索引的方法主要有下面3種:
1.     創建索引向導。可以從嚮導列表中啓動它。
2.     使用索引管理器。與創建索引向導相比,企業管理器的索引管理器是一個非常出色的工具,可以使用它來查看和管理一個表的所有索引。打開它的方法是:選擇一個表,然後右擊或者“操作”菜單上選擇“所有任務”〉“管理索引”菜單項即可。
3.     表的“屬性”對話框。該對話框的“索引/鍵”選項卡就是用來完成這項工作的。(注意:這個“索引/鍵”選項卡的界面設計稍微有點問題,即在其頂部的組合框用於選擇要修改的索引,但卻沒有“確定”或者“應用”按鈕,但無論在其中輸入什麼,都會隨同在表設計器中所做的其它改變一起應用到表上的。
(二)理解索引
SQL Server使用兩種基本類型的索引:聚集索引和非聚集索引。這兩種索引都可以對多個列進行索引,在這種情況下也可以稱它們爲組合索引。
1.     非聚集索引。在代碼中創建非聚集索引的方法是:使用CREATE INDEX DDL命令,並指定相應的索引名,以及要進行索引的表和列。如:
CREATE NONCLUSTERED INDEX IxOrderNumber
   ON dbo.[Order] (OrderNumber)
       在計算列上也可以創建索引,但是,如果想要在計算列或者索引視圖上創建和修改索引,必須先將quoted_identifier選項設置爲on
2.     聚集索引。聚集索引將表中的記錄行與索引鍵值以同樣的順序加以存儲。電話簿就是一個很好的聚集索引的例子,其中數據和索引都以同樣的順序加以存儲。在聚集索引的內部,SQL Server合併了索引頁的葉節點與數據頁,也正由於數據只可能有一種物理存儲順序,因此每個表只能有一個聚集索引。
注:(1)合併聚集索引的葉節點與數據具有兩個作用。首先,通過聚集索引檢索數據只需要更少的邏輯讀取的次數。其次,任意非聚集索引都將指向聚集索引的ID,而不再需要指向數據頁。
 (2)聚集索引將具有同樣索引鍵值的記錄行集中到儘可能少的數據頁中,因而減少了檢索一組記錄時需要讀取數據的頁數,基於同樣的原因,對於只返回一行記錄的查詢,使用聚集索引將不會明顯地提高性能。從中我們可總結出:因爲在每個表上只能創建一個聚集索引,所以它也是一種寶貴的性能資源,只有在那些經常作爲條件查詢一組記錄行的列上才應該建立聚集索引。
在代碼中創建聚集索引的方法與創建非聚集索引的方法非常類似,如:
CREATE CLUSTERED INDEX IxOrderID
   ON dbo.OrderDetail (OrderID)
刪除索引的方法是:使用DROP INDEX命令,並指定相應的表名和索引名:
DROP INDEX OrderDetail.IxOrderID
3. 組合索引。組合索引是擁有多個索引列的聚集或者非聚集索引,正因如此,只有在創建表之後,才能使用CREATE INDEX DDL命令來創建它們。如:
CREATE CLUSTERED INDEX IxGuideName
   ON dbo.Guide (LastName, FirstName)
在組合索引中,索引列排列的先後順序非常重要。因爲,只有這樣的一些查詢才能夠使用組合索引:它們在查詢條件中所包含的索引列在組合索引中是從第一個索引列開始按照從左到右的順序依次排列的。
最後,在文章快結束的時候,再介紹一點(這一點好好重要噢!~):索引填充因子(FillFactor)應該設置爲多少才最合適,取決於數據庫的用途。如果數據庫主要用於數據檢索,就應當將填充因子設置爲較大的值以儘可能填滿一個索引頁的空間;反之,如果需要對錶進行大量的插入操作,在索引頁上保留一些空間就可以提高更新操作的性能;還有,如果對於表插入操作的數量變化幅度較大,將填充因子設置爲一箇中間的值,並選擇填充索引(PAD_INDEX)選項就比較合適了!
CREATE INDEX命令中也可以指定填充因子和填充索引選項。例如下面的代碼在[Order]表的OrderNumber列上創建一個索引,並指定在葉節點和中間級節點上都保留15%的自由空間:
CREATE NONCLUSTERED INDEX IxOrderNumber
     ON dbo.[Order] ((OrderNumber)
         WITH TILLFACTOR=85, PAD_INDEX
好了,今天就到這裏吧!我去喫飯了,哈哈!~
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章