gpt4 book ai didi

mysql - 我应该在 INNER JOIN 的每个部分之后使用 WHERE 子句,还是最好将它们堆叠在最后?

转载 作者:行者123 更新时间:2023-11-29 07:23:39 24 4
gpt4 key购买 nike

我正在使用 MYSql 和 INNOdb。我有三个表(A、B 和 C),我想将它们连接起来以获得结果。它们的外键正确相关。以下哪一个查询速度更快?

SELECT * FROM A
INNER JOIN B ON A.B_id=B.id
INNER JOIN C ON A.C_id=C.id
WHERE A.x=some_constant AND B.y=some_other_constant AND C.z=some_other_constant

或者:

SELECT * FROM A
INNER JOIN (SELECT * FROM B WHERE B.y=some_other_constant) AS B ON A.B_id=B.id
INNER JOIN (SELECT * FROM C WHERE C.z=some_other_constant) AS C ON A.C_id=C.id
WHERE A.x=some_constant AND

或者也许有更快的方法吗?

最佳答案

它在逻辑上是不同的 - 您是限制进入连接集的内容,还是创建一个约束较少的连接集并随后在单独的阶段进行过滤?当您有左(外)连接时,这实际上会给出不同的结果。

逻辑上限制连接集中的内容(对连接本身施加约束)也应该更快,但您正在猜测查询优化器,无论如何它可能会在幕后重构查询。两种方式都进行测试,看看是否可以测量出任何差异。

关于mysql - 我应该在 INNER JOIN 的每个部分之后使用 WHERE 子句,还是最好将它们堆叠在最后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com