資料庫的部分索引

xuexiaogang發表於2023-01-10

     書接上回上次說到key_len的長度。我們假設有一個表50個欄位,有很多資料,大約有100G吧。我們理想化一點,每個欄位一樣大小。那麼在其中一列上建立索引,那麼執行select  column from table 這樣的情況如圖1

資料庫的部分索引

                                                                                                       圖1

不用會表,索引覆蓋。那麼這樣的話基於我們的假設,這樣其實只查了1/50的總表,也就是100G的1/50,那麼就是2G。所以說即使全索引掃描也是比全錶快50倍。因為只查這個欄位等於這個欄位類比成為一個大表的小表。

那麼請看我圖2。特點是a和b兩列資料一樣,而且只有大約前幾位不一樣,後面都一樣的特殊場景。

資料庫的部分索引

                                                                                         圖2

然後給a和b分別建立索引。如圖3.可能t2索引這樣的寫法大家覺得有點非主流。對就是不一樣。他意思是隻為這個欄位前3個字元建立索引。為什麼?因為後面的一樣,沒必要去浪費這些儲存了。

資料庫的部分索引

                                                                  圖3

然後我們看看結果,如圖4.透過上一篇的key_len的知識大家應該知道這個是怎麼算的了。 可以看到部分索引的key_len是全欄位索引的1/3左右。那麼,繼續我們剛才說的。如果我們假設有一個表50個欄位,每個欄位大小一樣,查一個欄位相當於一個表的1/50.那麼這樣的部分索引等於又在1/50的基礎上繼續縮小,那麼又會得到更大的提升。

資料庫的部分索引

                                                                            圖4

不過場景使用也有條件,所以知道部分索引的人不多。有條件的可以用用。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2931642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章