Mysql的key_len計算方法

說明

使用mysql的explain時,ken_len表示索引使用的字節數,根據這個值,就能夠判斷索引使用狀況,特別是在組合索引的時候,判斷全部的索引字段是否都被查詢用到。html

環境

Mysql 5.6.19-logmysql

計算基礎

1. 數據類型自己佔字節長度sql

int(11)  4
tinyint(4)  1
timestamp  4
datetime  8

2. 索引字段的附加信息ide

定長類型:char\int\datetime等,須要有是否爲空的標記,佔用1個字節。若是字段定義爲非空(not null)時,不佔用字節。
變長類型:varchar等,須要是否爲空的標記和長度信息,共佔用2個字節。

3. 字符集編碼

gbk編碼爲:1個字符2個字節
utf8編碼爲:1個字符3個字節
utf8mb4編碼爲:1個字符4個字節

示例

output:
| id | select_type | table    | type  | possible_keys   | key             | key_len | ref  | rows  | Extra                                              |
+----+-------------+----------+-------+-----------------+-----------------+---------+------+-------+----------------------------------------------------+
|  1 | SIMPLE      | tv_video | range | idx_media_audit | idx_media_audit | 167     | NULL | 18127 | Using index condition; Using where; Using filesort |

KEY `idx_media_audit` (`source_type`,`ol_status`,`op_user`,`updated_at`,`created_at`) USING BTREE

計算字節長度:
int(11)  4 [+1 not null]
tinyint(4)  1 [+1 not null]
varchar(40)  40 * 4 +2
timestamp()  4 [+1 not null]
timestamp()  4 [+1 not null]

key_len 167 = 4 + 1 + 160 + 2 = 167

結論:用索引只用到了前3個字段

相關文章:

mysql 各數據類型的 大小及長度code

mysql explain 中key_len的計算htm

淺談MySQL中utf8和utf8mb4的區別blog

相關文章
相關標籤/搜索