Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

10.2.1.23 避免全表扫描

EXPLAIN 的输出中可以看到 ALLtype 列中,当 MySQL 使用全表扫描来解析查询时。这通常在以下情况下发生:

  • 表非常小,以至于执行表扫描比使用键查找更快。这通常发生在少于 10 行且行长度较短的表中。

  • ONWHERE 子句中没有可用的限制条件用于索引列。

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

  • 您正在通过另一个列使用低基数(许多行匹配键值)的键。在这种情况下,MySQL 假设使用键可能需要许多键查找,因此表扫描将更快。

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