首页 > 解决方案 > 在 MySQL 中优化查询

问题描述

例如,对于比查询 2 更大的数据库,查询 1 是否更优化,或者我只是通过额外的 WHERE 子句将工作加倍?

查询一:

SELECT sample_data
FROM table1 INNER JOIN table2 ON table1.key = table2.key
WHERE table1.key = table2.key;

查询 2:

SELECT sample_data
FROM table1 INNER JOIN table2 ON table1.key = table2.key;

因为我读到这篇文章说在 JOIN 子句中使用过滤器可以提高性能..:

在此处输入图像描述

标签: mysqlquery-optimization

解决方案


我喜欢这样说:

  • ON是您指定表如何相关的地方。
  • WHERE用于过滤。

这使得阅读查询的人很容易理解它。

实际上(对于 MySQL),JOIN(aka INNER JOIN) 对待ONWHERE相同。也就是说,没有性能差异。您的查询 1 不必要地指定了“关系”两次。

此外,MySQL 的优化器非常聪明,可以意识到两列何时具有相同的值。例如,

SELECT ...
    FROM a
    JOIN bb  ON a.foo = bb.foo
    WHERE       a.foo = 123

如果优化器决定从过滤器开始bb.foo = 123更优化,它会这样做。注意:这您展示的示例不同;它加入一件事 ( id) 但过滤另一件事 ( date)。那里的两个查询等价!

LEFT JOINON,必然区别对待WHERE。(但这是另一个话题。)


推荐阅读