无视性能,我会从下面的查询A和B得到相同的结果吗?C和D怎么样?
-- A
select *
from a left join b
on <blahblah>
left join c
on <blahblan>
-- B
select *
from a left join c
on <blahblah>
left join b
on <blahblan>
-- C
select *
from a join b
on <blahblah>
join c
on <blahblan>
-- D
select *
from a join c
on <blahblah>
join b
on <blahblan>
Run Code Online (Sandbox Code Playgroud) 将条件放入JOIN子句与WHERE子句之间是否存在差异(性能,最佳实践等)?
例如...
-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'
-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪个(也许是为什么)?
我在Where子句中有一个包含三个内连接语句的查询.查询大约需要2分钟才能执行.如果我只是改变两个内连接的顺序,性能下降到40秒.
除了改变内连接的顺序之外怎么做才能对查询性能产生如此巨大的影响?我原本以为优化器会想到这一切.
我正在选择数据以输出用户已标记书签的帖子。
保持该主表id的第posts一个用户已加书签,被称为bookMarks。这是从表posts中选择的基础posts表格,以显示给用户。
书签
id | postId | userId
--------------------------
1 | US01 | 1
2 | US02 | 1
3 | US01 | 2
4 | US02 | 2
Run Code Online (Sandbox Code Playgroud)
帖子
id | postId | postTitle
--------------------------
1 | US01 | Title 1
2 | US02 | Title 2
3 | US03 | Title 3
4 | US04 | Title 4
Run Code Online (Sandbox Code Playgroud)
我的SQL目前是这样的:
select a.postsTitle
from posts a
inner join bookmarks b …Run Code Online (Sandbox Code Playgroud)