加入条件的顺序重要吗?
Posted
技术标签:
【中文标题】加入条件的顺序重要吗?【英文标题】:Order of join conditions important? 【发布时间】:2013-06-20 08:11:43 【问题描述】:考虑这个查询
SELECT users.id,
users.name
FROM users
LEFT JOIN suppliers
ON users.id = suppliers.id
AND users.hall = suppliers.hall
WHERE USER.payment > 300
在这种情况下,join条件中的顺序变化(即id第二和hall第一)将如何变化?
【问题讨论】:
这里有什么问题? 对 ON 子句完全没有影响。哪个是 LEFT JOINed 将产生巨大的影响 【参考方案1】:Join 条件的顺序对结果没有影响,因为它们代表一个整体分析的布尔表达式。
【讨论】:
确实如此。您应该考虑以与它们在索引中相同的顺序使用它们。如果不是所有字段都在索引中,则应首先使用已索引的字段。 两张桌子的索引都在订单大厅里,所以改变它吧:)。谢谢@RomanoZumbé 塞尔吉奥,罗马诺,你确定吗?我刚刚做了一个(微小的)测试,颠倒了条件的顺序——但是两个查询的 EXPLAIN 计划是相同的!但是,正如我所说,这是一个很小很小的测试,所以可能不相关。 顺序影响选择的索引对我来说似乎也不合逻辑,所以就像@Strawberry 我也进行了快速测试。根据加入条件的顺序,我也找不到计划中的任何更改。在使用的每个字段上都没有键,也没有在包含两个字段的覆盖索引上。 这可能适合简单的查询,因为它会为您优化。但是,例如,如果您使用字符串作为查询,这可能会改变以上是关于加入条件的顺序重要吗?的主要内容,如果未能解决你的问题,请参考以下文章