mysql57中in的使用效率问题探讨

mysql语句中经常用到in,但从mysql老版本中经常看到使用in会导致的各种性能问题,

比如in中的值如果超过个或个就会导致sql性能大幅下降,甚至不走索引等种种问题

我们在mysql5.7中测试下,来看看该版本中in是否还存在如网上所说的问题

创建表:

CREATETABLE`a`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`name`varchar(45)DEFAULTNULL,

PRIMARYKEY(`id`),

KEY`name`(`name`)

)ENGINE=InnoDB

我们插入a表中十万级别的数据,然后进行下面测试

确定值查询

3个值查询情况

explainextended

select*fromawherenamein(,,);

个值的查询情况

explainextended

select*fromawherenamein(,……,);

通过上面两个不同个数的值的查询对比,执行计划是一致的,并没有出现网上所说的超过个就不走索引,小于就走索引的情况出现,所以我们得出结论in是肯定走索引的。

动态9个值查询

explainextended

select*fromawherenamein(selectnamefromaasbwhereid10);

动态个值查询

explainextended

select*fromawherenamein(selectnamefromaasbwhereid0);

我们发现动态的in查询计划也是一致的,并没有因为值的个数而不同。

综合上面的查询结果我们可以看到mysql5.7中in是可以很好的走索引,也并没有因为值个数而导致性能下降




转载请注明:http://www.aierlanlan.com/cyrz/1264.html