- 论坛徽章:
- 0
|
好吧,我也来说几句。
第一,LZ在1L问的为什么长度是137, 原因是:你的字符集是utf8,每个字符占3个字节,所以是45*3+2。这个2是因为innodb里面所有的二级索引都包含了主键,主键是smallint,占2字节。
那么为什么不选择走主键索引呢? 说实话,我刚看你SQL语句也觉得该走主键索引,但是既然实际情况没走,那么肯定就有它自己的原因了,我个人猜想是:1,因为你需要的字段都可以在二级索引idx_actor_last_name里面得到。2,主键索引比二级索引大得多,在优化器看来还不如直接走二级索引来个扫描,扫描主键索引可能需要更多的IO。
第二,LZ在4L说的,你怎么扯出个135了? 你强制使用主键索引,所以索引长度是2很正常啊,与135有什么关系?
最后说明的是:mysql的优化器做得确实不是很到位,所以又时候没有预期的也属比较正常。另外关于explain的key_len这一列,我想说明一下,它表示实际使用到的索引长度, 比如有一个索引idx_a_b(a,b),优化器在实际执行中使用到了idx_a_b的那一部分,那么key_len 就是这部分,而不是这整个索引的长度。还有,如果你的字段允许为空,那么key_len要加1,这一个字节用来判断是否为空。 |
|