在Explain Statement中理解MySQL key_len

Que*_*low 15 mysql

根据MySQL网站,该key_len列表示MySQL决定使用的密钥的长度.NULL密钥列表示长度NULL.请注意,key_len的值使您可以确定MySQL实际使用的多部分密钥的多少部分.

使用上一个问题的一个例子,我有一个EXPLAIN SELECT语句,显示使用Indexwith的MySQL key_len: 6.下面显示了使用的索引和列的组成.

`Type` char(1) NOT NULL,
`tn` char(1) NOT NULL DEFAULT 'l',
`act` tinyint(1) unsigned NOT NULL DEFAULT '0',
`flA` mediumint(6) unsigned NOT NULL DEFAULT '0',
KEY `Index` (`Type`, `tn`, `act`, `flA`)
Run Code Online (Sandbox Code Playgroud)

那么值如何key_len让我确定我的查询使用多部分键的前三部分?

Joh*_*ica 20

key_len指定MySQL从密钥使用的字节数.
索引总是使用left_to_right.即只使用最左边的部分.

字段的长度如下:

1 byte             `Type` char(1) NOT NULL,
1 byte             tn char(1) NOT NULL DEFAULT 'l',
1 byte             act tinyint(1) unsigned NOT NULL DEFAULT '0',
3 bytes            flA mediumint(6) unsigned NOT NULL DEFAULT '0',
1+1+1+3 = 6 bytes  KEY `Index` (`Type`, `tn`, `act`, `flA`)
 key usage always starts here ---^^^^^
Run Code Online (Sandbox Code Playgroud)

如果key_len = 3那么它正在使用type+tn+act.
请注意,在此配置中,Key_len = 4是不可能的.

  • @ all,[mediumint]的3个字节(http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html)是正确的. (2认同)