一、什麼是索引
索引可以理解為我們小時候使用 的漢語字典的索引,如果想在字典中查詢乙個字,一頁一頁地翻字典查詢是非常慢的,但如果使用 字典的索引進行查詢,很快就可以查到了。資料庫的索引也是類似的。
資料庫中的索引一般是按照b樹來組織的,葉結點指向真正的資料,b樹的定義我這裡就不介紹了,有興趣的話可以去翻翻資料結構的書。
二、聚族索引
在這裡還是用 字典來進行模擬,一般來說漢語字典中有幾種索引,如拼音、偏旁、筆畫等。字典本身的組織也是排序的,我記得一般是按照拼音排序的。這裡的拼音就是聚族索引。也就是說聚族索引的組織順序和資料本身的組織順序是一致的 ,這也解釋了資料庫中只能定義乙個聚族索引的原因,因為資料本身只能按一種方式進行排序。
那聚族索引有什麼 特別的好處呢,這個好處就是在資料庫中執行查詢一批資料的語句會比較快,因為資料已經按照聚族索引排好序了,很少的io操作就可以將資料 從庫中取出。好比你在字典中查詢發音從從a到c的漢字,只需要查到a的開始頁和c的結束頁,中間的所有頁都符合查詢要求,不用 再一頁一頁地查詢。
圖1 聚族索引
三、非聚族索引
非聚族索引就好比字典裡的偏旁、筆畫索引,其
索引組織順序和資料組織順序不一致 ,因此非聚族索引可以建立多個。當查詢一條資料時,非聚族索引和聚族索引的效率相差不大,但查詢一批資料(n)時,非聚族索引需要的io可能是聚族索引的n倍,因為非聚族索引需要一條一條地進行查詢。
圖2 非聚族索引
四、組合索引
組合索引
在索引的key中儲存了所有組成該
組合索引
的字段 ,但只按第乙個字段進行排序 。 因為索引key中儲存的內容增多,因此組合索引
需要的空間一般來說比單字段索引大。
組合索引
的好處是假如你的查詢需要返回的資料字段都在
組合索引
的索引字 段中,資料庫將不會訪問資料頁,而直接返回索引中的字段值,可以加快查詢速度。假如你的查詢不滿足這個條件,
組合索引
就是沒有意義的,反而浪費了儲存空 間。
圖3 組合索引
最後出一道小題目,考考大家看懂沒有:
假設表中一共有100條資料,索引的b樹為三層,查詢結果返回50條按照聚族索引排序的資料,不建索引查詢、按照聚族索引查詢、按照非聚族索引查詢所需的io次數各是多少?
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...