SqlServer2008例項28索引預覽

2021-10-08 10:25:53 字數 1297 閱讀 9574

索引是在表上建立的資料庫物件,它可以提供到資料的更快的訪問通道,並且可以使查詢執行更快。索引為sql server提供了更有效地訪問資料的方式。使用索引,你不用總去查詢表中的每個資料頁,檢索特定行時也不用讀取表的所有內容。

在預設情況下,常規的未作索引的表中的行不會以任何特定的順序儲存。處於無序狀態的表被稱為堆( heap)。為了基於一組搜尋條件從堆中檢索匹配的行,sql server不得不檢查表中所有的行。即使只有一行匹配搜尋條件,並且那行恰恰是sql server資料庫引擎讀取的第一行,sql server也仍然需要遍歷每一條表記錄,因為要知道是否有其他匹配行存在沒有其他方法。這種資訊掃瞄稱為全表掃瞄。對於乙個大型表,這可能意味著只是檢索一行就要讀取數百、數於、數百萬或數十億行。但是,如果sql server知道在表的一列或多列上存在索引,它就可能會使用這個索引更有效地去搜尋匹配的記錄。

在sql server中,表包含在乙個或多個分割槽(partition)中。乙個分割槽是乙個組織單元,允許你水平劃分表中和(或)索引中的資料,但仍然管理乙個邏輯物件。當建立乙個表時,預設情況下,它的所有資料都包含在乙個分割槽中。分割槽包含了堆,或者當建立索引時,為b樹結構(b-tree structure)。

當建立索引時,索引鍵資料儲存在b樹結構內。b樹結構從索引開始的根節點開始。這個根節點(root node)擁有包含一系列指向下一級索引節點的索引鍵值的索引資料,稱為中間葉級別(intermediate leaf level)。節點的底部級別稱為葉級別(leaf ievel)。葉級別基於實際的索引型別是聚集(clustered)或非聚集(nonclustered)而不同。如果它是聚集索引,則葉級別是實際的資料頁本身。如果為非聚集索引,則葉級別包含指向堆或聚集索引資料頁的指標。

聚集索引決定實際表資料如何進行物理儲存。你只能指定乙個聚集索引。這個索引型別依照指定的索引鍵列儲存資料。聚集索引的b樹結構如下圖。注意葉級別是實際的資料頁。

聚集索引的選擇很關鍵,因為乙個表只能擁有乙個聚集索引。一般情況下,由於聚集索引的資料在物理上是以特定的順序組織的,所以聚集索引經常選用以範圍查詢來查詢的列。範圍查詢使用關鍵字between以及大於(>)和小於(

非聚集索引儲存在與物理資料分離的索引頁上,指標指向位於索引頁和節點的物理資料。非聚集索引列按照索引鍵列值的順序進行儲存。你可以在表上或索引檢視上擁有最多249個非聚集索引。對於非聚集索引,葉節點級別是連線到指向堆的行或聚集索引行鍵的行定位器的索引鍵:

SqlServer2008例項15高階資料修改技術

目錄 1.使用top分塊修改資料 2.在一條語句中執行insert update和delete use adventureworks go 建立乙個示例刪除表 select into production.example billofmaterials from production.billofm...

SqlServer2008例項19事務 鎖定和併發

隔離性 isolation 是acid中的乙個屬性。事務隔離是指由某個事務作出的修改能被資料庫產生的其他事務看見的程度 例如在資料庫訪問併發的條件下 對於最高端的隔離,每乙個事務產生就好像在同一時間只有 乙個事務存在一樣,它看不到其他事務作出的修改。對於最低階的隔離,任何事務進行的操作,無論是否提交...

SqlServer2008例項27管理超大型表

sql server表分割槽功能和檔案組的放置.表分割槽提供了內建的方法來水平劃分表 索引中的資料,同時要管理乙個邏輯物件。水平分割槽是指每乙個分割槽都有同樣數量的列,只是減少了行的數量。分割槽能使超大型表 索引的管理變得簡單,減少載入時間,改善查詢時間,並允許更小的維護視窗。sql server ...