0

根据有关以下内容的 MySQL 文档Optimizing Queries With Explain

* ALL:对先前表中的每个行组合进行全表扫描。如果该表是第一个未标记为 const 的表,这通常不好,并且在所有其他情况下通常非常糟糕。通常,您可以通过添加索引来避免 ALL,这些索引允许基于先前表中的常量值或列值从表中检索行。

这是否意味着可以优化使用 ALL 的任何查询,使其不再进行全表扫描?

换句话说,通过向表中添加正确的索引,是否可以始终避免使用 ALL?或者在某些情况下,无论您添加什么索引,ALL 都是不可避免的?

4

2 回答 2

2

几乎(在某些情况下进行全扫描实际上更便宜)总是可以优化 ONE 查询,以避免通过创建适当的索引来进行全扫描。但是,如果您对同一个表运行多个查询,那么在某些情况下,其中一些最终会进行全扫描,或者您最终会得到更多索引,那么您的表中有列:-)

于 2009-07-28T19:57:36.733 回答
1

是的,有些查询很难生成适当的索引。例如:

SELECT * FROM mytable WHERE colA * arg0 - colB > arg1

不过,我不完全确定您为什么要进行这样的查询:)

也就是说,过多的索引会占用更多的缓存内存和磁盘空间,并减慢更新和插入的速度。

于 2009-07-28T20:02:11.577 回答