使用EXPLAIN分析SQL时,当列出执行计划表中type字段值为ALL时,代表需要全表扫描,全表扫描常会发生在以下场景中。
1> 所扫描的数据表非常小,因此全表扫描的速度要远快于使用索引,在小于10行或行数据比较短的表中更常见。
2> 在ON或WHERE子句中没有可以使用的索引列。
3> 在使用索引列与常量值比较,并且MySQL服务已经通过索引树计算出常量值覆盖了大部分表数据,此时使用全表扫描是比较快的。
4> 当前正在使用一个对于其他列来说基数较低的索引(每个索引值在另一列都有多行行对应),在这种情况下,使用索引可能会引起较多的索引查询,MySQL认为全表扫描比较快。