使用Explain时如何确定MySQL联合索引的单个字段使用情况?

如题,使用Explain命令可以确定MySQL语句是否走索引,但是问题是,当你使用的是联合索引时,Explain的结果只能告诉你是否走了该联合索引,无法精确到单个字段是否走索引。
例如

EXPLAIN SELECT * FROM student WHERE student.gender="male" AND student.height>180;

很明显height字段是不走索引的,但是Explain结果里只能看到使用了联合索引。
所以,我想请问,这种情况,如何确定单个字段是否走了索引呢,谢谢!

阅读 2.5k
1 个回答

可以通过explain结果中的key_len来大概判断走了哪几个字段的索引,比如tinyint占1个字节,int占4个字节,char(10)在utf8编码下占10x3=30字节,然后如果字段可为空,则需要再加1个字节

官方文档说明如下

key_len (JSON name: key_length)

The key_len column indicates the length of the key that MySQL decided to use. The value of key_len enables you to determine how many parts of a multiple-part key MySQL actually uses. If the key column says NULL, the key_len column also says NULL.

Due to the key storage format, the key length is one greater for a column that can be NULL than for a NOT NULL column.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题