mysql负向查询(>,<,in,not in……)以及between的索引使用情况

常见的误区:

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


image.png

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

image.png

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

image.png

其他都不一 一截图了,充分证明。between,>,<这些运算符使用索引,并不是简单的一刀切。

重点来了,其实在这些运算符使用索引的因素是:随机IO的高低,说得直白点就是:between的范围,>,<的范围,以及in条件字符串的长度,请看以下截图:

image.png
image.png
image.png
image.png

上面四张图,前面两张图都使用上了索引,但后面仅将范围增加了1,就导致索引无法使用。而且between和“>”“<”的范围惊人的一致……

至于其它如in这些,由于时间有效,就不一一验证了。所以,网上的信息不可尽信,还是要自己动手验证

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容