1. 程式人生 > >聚集索引與非聚集索引

聚集索引與非聚集索引

圖片 數據塊 找到 tro pan 使用 所有 多個 lib

聚集(clustered)索引

  數據行的的物理順序與列值(一般主鍵事務那一列)的邏輯順序相同,一個表中只能有一個聚集索引。

  一個表就像以前用的新華字典,聚集索引就像拼音目錄,而每個字存放的頁碼就是數據的物理地址,如果查詢一個字,只需查詢該字對應在字典拼音目錄對應的頁碼,就可以查詢到這個字所在的位置,而拼音目錄對應的A-Z的字順序,和新華字典實際存儲的字的順序A-Z也是一樣的。數據行的物理順序與列值的順序相同,如果查詢的id比較靠後的數據,那麽這行數據的地址在磁盤中的物理地址也會比較靠後。而且由於物理地址排列方式與聚集索引的順序相同,所以就只能建立聚集索引。

技術分享圖片

  聚集索引的好處是索引的葉節點就是對應的數據節點,可以直接獲取到對應的全部列的數據,而非聚集索引在索引沒有覆蓋到對應的列的時候需要進行二次查詢,因此在查詢方面,聚集索引的速度往往會更占優勢。

非聚集索引

該索引中索引的邏輯順序與磁盤上的物理存儲順序不同,一個表中可以有多個非聚集索引。

非聚集索引就像字典中的偏旁字典,它的結構順序與實際存放順序不一定一致。

技術分享圖片

  非聚集索引的葉節點 仍然是索引節點,只是有一個指針指向對應的數據塊,如果使用非聚集索引查詢,而查詢列中包含了其他該索引沒有覆蓋的列,那麽還要進行第二次查詢,查詢節點上對應的數據行的數據。

  聚集索引對於那些經常要搜索範圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。例如,如果應用程序執行 的一個查詢經常檢索某一日期範圍內的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然後檢索表中所有相鄰的行,直到到達結束日期。這樣有助於提高此

類查詢的性能。同樣,如果對從表中檢索的數據進行排序時經常要用到某一列,則可以將該表在該列上聚集(物理排序),避免每次查詢該列時都進行排序,從而節省成本。

聚集索引與非聚集索引