sql優化,key len的計算(常用型別)

2021-09-25 11:38:46 字數 931 閱讀 2270

key_len的作用是看索引哪些欄位被用到,具體來說是看聯合索引。因為索引只有乙個字段的話,你直接看key就行了。

聯合索引有很多字段,哪些用到索引,哪些沒有,explain裡面有key_len可以幫助我們分析。key_len的長度,可以計算出來哪些欄位被使用。

下面講些常用的字段的占用空間計算規則,

一般來講,key_len的值=字段長度*這個型別的字段所佔空間(位元組),這個單位是位元組。

但是僅僅知道這個規則計算的時候經常是錯誤的,我們還要考慮字段型別,mysql版本,是否允許為空,是否可變長度,還有字元編碼集。

int 型別占用4個位元組

char 乙個位元組

varchar 3個位元組

datatime 5~8個位元組

當知道字段執行為空的時候,底層需要乙個位元組標註這個欄位的空約束。而不允許為空的時候不需要標註,因為不允許為空是預設的。

當字串是可變長度型別的時候,varchar就是這個型別。那麼除了空約束以為,還有可變長度這個約束占用2個位元組。

再比如,datatime在mysql5.6是5個位元組,可是在5.5是8個位元組。

下面具體計算一下:

int id(10) not null key_len=104

int id(10) not null unsigned key_len=104

int id(10) key_len=104+1

varchar(10) not null key_len=103+2 2是可變長度

varchar(10) key_len=103+2+1

char(10) key_len=101+1

char(10) not null key_len=10*1

補充一下,unsigned不占用位元組空間

總結:影響key_len長度的可變長度,允許為空,版本,字段型別

explain語句中的key len計算

有時候表中有聯合索引時,我們想確定我們的sql使用了幾個索引字段,這時候就可以用explain檢視該sql的key len,然後通過key len的值來判斷該sql使用了幾個索引字段。假設有如下表 create table tblgameremain id int 11 not null auto ...

sql基於座標計算距離的優化

如題,下面是最初版的sql,取與目標座標150千公尺範圍內的記錄 select top 10 from t temple a with nolock where dbo.fngetdistance 37.356976,116.8425,lat,lon 150 order by a.id asc 因為...

18 SQL優化 其他SQL的優化

定期分析表,檢查表,優化表 analyze local no write to binlog table table name table name1 本語句用於分析和儲存表的關鍵字分布,執行一次分析表,在分析期間使用乙個讀取鎖定。這對於myisam,bdb 和innodb 表有作用,對於 myis...