Documentation Home
MySQL 8.0 参考手册  / 第8章优化  / 8.2 优化SQL语句  / 8.2.1 优化 SELECT 语句  /  8.2.1.20 避免全表扫描

8.2.1.20 避免全表扫描

当 MySQL 使用 全表扫描来解析查询时 ,输出EXPLAIN显示 ALL在 列中。这通常发生在以下条件下: type

  • 该表非常小,执行表扫描比费心查找键要快。这对于行数少于 10 且行长度较短的表很常见。

  • 索引列 的ONor子句 中没有可用的限制 。WHERE

  • 您正在将索引列与常量值进行比较,并且 MySQL 已经计算出(基于索引树)常量覆盖表的太大部分并且表扫描会更快。请参阅 第 8.2.1.1 节,“WHERE 子句优化”

  • 您正在通过另一列使用基数较低的键(许多行与键值匹配)。在这种情况下,MySQL 假设通过使用键,它可能会执行许多键查找,并且表扫描会更快。

对于小表,表扫描通常是合适的,性能影响可以忽略不计。对于大型表,请尝试以下技术以避免优化器错误地选择表扫描: