1. 程式人生 > 其它 >key_len的計算方式

key_len的計算方式

explain

我們可以通過explain關鍵字分析sql的執行計劃,從而可以檢查是否用到索引
當用的組合索引時,有可能只使用前半部分索引,此時key_len的數值小於組合索引的大小

key_len的計算方式

  • 如果這個欄位允許為空,多佔用1個位元組的額外空間,所以索引欄位最好不要為NULL,因為NULL讓統計更加複雜,並且需要額外的儲存空間。
  • 不同編碼,佔用位元組數不一樣,例如utf8varchar佔用3個位元組,utf8mb4的varchar佔用4個位元組
  • 變長欄位需要額外的2個位元組(VARCHAR值儲存時只儲存需要的字元數,另加一個位元組來記錄長度(如果列宣告的長度超過255,則使用兩個位元組),所以VARCAHR索引長度計算時候要加2)
    • 例如 varchar(255)
      這個欄位在utf8mb4編碼下 佔用位元組數=255*4+1+2 ,其中的1是允許為null佔用,2是變長欄位記錄長度的額外空間
  • 固定長度欄位(例如char(8))不需要額外的位元組。這個欄位在utf8mb4編碼下 佔用位元組數=84如果允許為null,則 佔用位元組數=84+1)
  • 對於 account_id varchar(20),region varchar(3),PurchaseDate varchar(30)這樣的組合索引 account_id, region, PurchaseDate,如果where條件跳過region,則只會使用到account_id索引,所以此時explain的結果中key_len的大小為20*4+2+1=83