优化MySQL查询:是否始终可以优化查询,以便它不使用“全部”

时间:2009-07-28 19:53:27

标签: optimization mysql explain

根据有关Optimizing Queries With Explain的MySQL文档:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

是的,有些问题会让您难以产生合适的索引。例如:

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

我不完全确定你为什么要提出这样的问题,但是:)

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