mysql联合索引的使用

  • Post author:
  • Post category:mysql

这篇笔记主要记录联合索引的使用

设置了shopId、userId、relationId三个字段,作为联合索引,这三个字段,都是long类型的,也就是bigint
分别验证以下几个场景:
场景一:explain select * from testIndex where shopId = 1 and user_id = 1001 and relationId = 1;
场景二:explain select * from testIndex where shopId = 1 and user_id = 1001;
场景三:explain select * from testIndex where shopId = 1;
场景四:explain select * from testIndex where shopId = 1 and relationId = 1001;
场景五:explain select * from testIndex where shopId = 1 and user_id > 1;

索引信息:

在这里插入图片描述

场景一:

可以看到,在三个字段都使用的场景下,使用了索引,需要注意这里的key_len
在这里插入图片描述

场景二:

这里只有前两个字段参与了索引的查询,所以key_len是16
在这里插入图片描述

场景三:

这种情况下,毋庸置疑,只有第一个字段,使用了索引,所以key_len是8
在这里插入图片描述

场景四:

这种情况下,虽然也走了索引,但是实际上,只有第一个字段,参与了索引的查询,所以key_len是8
在这里插入图片描述

场景五:

在第二个字段是大于条件的时候,也走了索引,因为key_len是16
在这里插入图片描述

这里特意在网上查了下,联合索引,如果B字段使用的是大于,是否会使用索引的这个问题,大部分的说法是:如果是数字类型,会走索引,如果是普通的字符串类型(varchar),那mysql内部会判断,如果走索引查询效率并没有明显提升的时候,就不走索引了


版权声明:本文为CPLASF_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。