mysql - 在 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 子句中使用过滤器可以提高性能..:
解决方案
我喜欢这样说:
ON
是您指定表如何相关的地方。WHERE
用于过滤。
这使得阅读查询的人很容易理解它。
实际上(对于 MySQL),JOIN
(aka INNER JOIN
) 对待ON
和WHERE
相同。也就是说,没有性能差异。您的查询 1 不必要地指定了“关系”两次。
此外,MySQL 的优化器非常聪明,可以意识到两列何时具有相同的值。例如,
SELECT ...
FROM a
JOIN bb ON a.foo = bb.foo
WHERE a.foo = 123
如果优化器决定从过滤器开始bb.foo = 123
更优化,它会这样做。注意:这与您展示的示例不同;它加入一件事 ( id
) 但过滤另一件事 ( date
)。那里的两个查询不等价!
LEFT JOIN
ON
,必然区别对待WHERE
。(但这是另一个话题。)
推荐阅读
- python - django TypeError: required() 得到了一个意外的关键字参数“用户名”
- google-app-engine - 结合条件通过 GQL 过滤祖先和属性
- javascript - 如何解析指令“ngChange”所需的控制器“ngModel”,找不到!例外?
- android-studio - 迁移到 AndroidX 后推断 Nullity 不起作用
- typescript - TypeScript 递归泛型参数类型
- c# - OData - 创建的自定义模型
- python - 缺少来自 spacy en_core_web_lg 的停用词
- python - 房屋贷款负担能力计算器
- javascript - 不要直接改变状态。使用 setState()
- javascript - 有人可以帮助我在 Safari 中使用 HTML5 播放器的画中画吗?