1. 程式人生 > >字首索引和覆蓋索引

字首索引和覆蓋索引

字首索引

當索引的字串列很大時,建立的索引也就變得很大,為了減小索引體積,提高索引的掃描速度,就用索引的前部分字串索引,這樣索引佔用的空間就會大大減少,並且索引的選擇性也不會降低很多。而且是對BLOB和TEXT列進行索引,或者非常長的VARCHAR列,就必須使用字首索引,因為MySQL不允許索引它們的全部長度。

使用:
列的字首的長度選擇很重要,又要節約索引空間,又要保證字首索引的選擇性要和索引全長度選擇性接近。

覆蓋索引(covering index)

提出問題:如果可以通過索引直接獲取行的資料,這樣就不需要再去讀取資料行。也就是說,如果葉子節點中已經包含要查詢的資料,那還有什麼必要再回表查詢呢?

一個索引已經包含(或覆蓋)所有需要查詢的欄位,稱之為“覆蓋索引”

覆蓋索引(或稱索引覆蓋),即從輔助索引中就可以得到要查詢的記錄,而不需要查詢聚簇索引中的記錄(顯然,聚簇索引是一種覆蓋索引,因為聚簇索引中包含了資料行的全部資料)

換句話說:就是select的資料列只用從索引中就能夠取得,不必從資料表中讀取,換句話說查詢列要被所使用的索引覆蓋。

舉例說明:例如student表中有一個聯合索引(name,age),如果MySQL只需要訪問這兩列,就可以使用這個索引做覆蓋。

當執行Select name,age from student查詢語句時,可以從索引中獲取要查詢的資料,不用再回表查詢。