MySQL 执行计划中的 key_len 表示什么
我们在使用MySQL中的 explain 命令查看执行计划中,往往能看到key_len 这个指标。 使用复合索引时,通过key_len 的值能判定SQL使用了索引中的哪些字段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
root@ 14:37: [sbtest1]> show create table sbtest1\G *************************** 1. row *************************** Table: sbtest1 Create Table: CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', `in_time` date DEFAULT NULL, PRIMARY KEY (`id`), KEY `k_1` (`k`), KEY `idx_k_pad` (`k`,`pad`) ) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=utf8mb4 MAX_ROWS=1000000 1 row in set (0.00 sec) root@ 14:38: [sbtest1]> explain select * from sbtest1 where k='3' and pad='2342'; +----+-------------+---------+------------+------+---------------+-----------+---------+-------------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+------+---------------+-----------+---------+-------------+------+----------+-------+ | 1 | SIMPLE | sbtest1 | NULL | ref | idx_k_pad | idx_k_pad | 244 | const,const | 1 | 100.00 | NULL | +----+-------------+---------+------------+------+---------------+-----------+---------+-------------+------+----------+-------+ 1 row in set, 1 warning (0.00 sec) `k` int(10) 4*10=40 `pad` char(60) 60*3=180 |
长度计算方法 1.字符集 字符集不同,字符占据的字节长度也不同。 字符集 字节长度 gbk 1个字符占2个字节 utf8 1个字符占3个字节 utf8mb4
Read more