常见的误区:
经常在网上看到这样的mysql索引优化:使用between代替>和<,可以避免索引无法使用的情况,以及in无法使用索引等。其实这都是有一定误区的。首先声明一个观点:>,<,in,between等等,都是可以使用索引的。
测试用表:one,数据2621440行,版本:5.5.53

当使用“between”时,却无法使用索引:

当使用“>”和“<”时,却又能使用索引:

其他都不一 一截图了,充分证明。between,>,<这些运算符使用索引,并不是简单的一刀切。
重点来了,其实在这些运算符使用索引的因素是:随机IO的高低,说得直白点就是:between的范围,>,<的范围,以及in条件字符串的长度,请看以下截图:




上面四张图,前面两张图都使用上了索引,但后面仅将范围增加了1,就导致索引无法使用。而且between和“>”“<”的范围惊人的一致……
至于其它如in这些,由于时间有效,就不一一验证了。所以,网上的信息不可尽信,还是要自己动手验证
网友评论