明明有主键索引,为什么mysql索引失效

执行语句,发现仓储表wh_warehouse全表扫描

EXPLAIN 
SELECT 
  * 
FROM
  wh_inbound_order_detail e 
  LEFT JOIN  wh_warehouse ww 
    ON ww.id = e.warehouse_id 
WHERE      ww.isGs = 0
    AND ww.is_jiancai = 0 

image.png
明明有索引的啊,为什么呢?只有主键索引的时候没没匹配到,那么干脆在创建个联合索引吧,没想到还是没匹配到。
image.png

阅读 2.8k
2 个回答

数据库是否使用索引是有机制的,不是百分百都使用索引。

使用索引之前会判断,到底有没有必要使用索引,但是具体是什么情况不走索引我没有深入了解过,我的猜测是当判断使用索引的速度更慢时,如果你的表里面只有几十几百条数据,完全没有必要去调用索引。

如果要强制使用索引:
select * from table force index(index_name)

mysql当数据量大且扫描超出数据的3/5时会丢索而使用全表扫描,因为mysql觉得使用全表扫描更快。image.png
且图中key才是真正使用到索引的表示,possible_keys是可能使用到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题