我有一个包含一列的表格:
|姓氏 | varchar(1000) | varchar(1000) |否 |乘法 |空 | |
我在此列上创建了索引:
在员工(last_name)上创建索引lastname_idx;
当我对 last_name
上有 WHERE
条件的 SELECT
执行 EXPLAIN
时,我看到:< br/>
key_len = 769
。
如果我没记错的话,key_len
显示索引值中使用的字节。
由于索引位于 last_name
上,即 varchar(1000)
,为什么是 key_len=769
?
不应该是1000
吗?
最佳答案
InnoDB 的默认行格式仅将字符串列的前导部分(最多 768 字节)存储在与其他列一起的页面上。任何多余的内容都存储在表空间另一段的“blob 页”上。
InnoDB 对 VARCHAR、BLOB、TEXT、VARBINARY 等(所有“可变长度”数据类型)使用相同的存储方法。有关更多存储详细信息,请参阅http://www.mysqlperformanceblog.com/2010/02/09/blob-storage-in-innodb/
看来 InnoDB 自动假定索引前缀长度等于它可以内联存储的列部分。你使用的是MySQL 5.6吗?我不记得在早期版本中看到过这种行为(它只会提示,并且您必须声明索引前缀长度)。
当您使用 varchar 时,EXPLAIN 报告的 key_len 总是包含一些额外的字节。
关于mysql - 解释一下MySQL中这个表中的key_len,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256738/