好吧,在看到小青蛙的这篇文章之前确实以为MySQL中 只要是 != 就不会用到索引。 mp.weixin.qq.com/s/CEJFsDBiz…
亲自试验了一下,事情确实没有那么简单
表里state索引,每个state对应的数量如下图:
显然上面的查询用到了索引。因为MySQL扫描索引发现不等于3的只有2条,很显然直接走索引拿到id再去回表就能很快找到。 但是下面的就没有走索引。因为MySQL扫描索引发现不等于1的记录有235条,占比很大,跟直接全表扫描的花费差不多大,索引就不走索引了。
所以对于使用不使用索引,要看最终要扫描的耳机索引记录条数。如果这个条数占整个记录条数的记录比例特别大,那么久趋向于使用全表扫描执行查询,否则趋向于使用这个索引执行查询。