初探Sql Server聚族和非聚族索引

聚族索引:聚族索引的順序就是數據物理存儲排列順序sql

非聚族索引:索引順序與數據物理存儲排列順序無關優化

一個表最多隻有一個聚族索引spa


sql server中,索引是經過二叉樹來描述的,具體定義:指針

聚族索引:索引的葉子節點就是數據節點server

非聚族索引:索引的葉子節點任是索引節點,只是有一個指針指向對應的數據塊索引



索引塊和數據塊區別效率


索引能夠提升檢索效率,由於其二叉數結構以及佔用空間小,因此訪問速度快二叉樹

eg:表中的一條記錄在磁盤上佔用1000字節,咱們對其中10個字節的一個字段創建索引,那麼該記錄對應的索引塊的大小隻有10字節。遍歷

sql server 的最小空間分配單元是「page」頁,若一個頁在磁盤上佔用8K空間,那麼這一個頁能夠存儲上述記錄8條,但能夠存儲索引8000/10=800條。im

咱們須要從一個有8000條記錄的表中檢索符合某個條件的記錄,

如沒有索引時,咱們可能須要遍歷8000×1000/8000=1000個頁才能找到結果;

若在檢索字段上面有上述索引時,那咱們能夠在8000×10/8000=10個頁就能檢索到知足條件的索引塊,而後根據索引塊上的指針一一找到數據塊,這樣IO訪問量少不少


索引的優化


索引有時不必定檢索的快,有時索引還不如不用索引快

eg:咱們檢索上述表中全部記錄,

如沒有索引時,咱們可能須要遍歷8000×1000/8000=1000個頁才能找到結果;

如使用索引,則先檢索索引,那咱們能夠在8000×10/8000=10個頁獲得索引的結果,再根據索引結果去對應數據頁,因爲檢索全部數據,因此須要訪問8000×1000/8000=1000個頁將所有數據讀取出來,一共訪問了1000+10=1010個頁面,這顯然不如不用索引快


sql server內部有一套完整的數據檢索優化技術,在上述狀況下,sql server的查詢計劃(Search Plan)會自動使用表掃描的方式檢索數據而不會使用任何索引。sql server是怎麼知道何時使用索引,何時不使用索引?sql server除了平常維護信息外,還維護着數據統計信息(數據密度信息、數據分佈信息)這些信息決定如何制定查詢計劃以及查詢是否使用索引及什麼樣的索引

相關文章
相關標籤/搜索