gpt4 book ai didi

sql - 内部联接与内部远程联接之间的区别

转载 作者:行者123 更新时间:2023-12-01 09:18:26 28 4
gpt4 key购买 nike

这个问题不知道要问哪里,只想知道 Inner JoinInner Remote Join 有什么区别?我刚刚尝试实现了两个连接,如下所示:

使用远程内部连接

SELECT P.CompanyName,u.UserName from tb_Offices AS P
INNER REMOTE JOIN
tb_Users AS U
on P.UserId=U.UserId

使用简单内连接

SELECT P.CompanyName,u.UserName from tb_Offices AS P
INNER JOIN
tb_Users AS U
on P.UserId=U.UserId

两个查询返回相同类型的记录。

然后我尝试使用执行计划运行:

使用 Remote Inner Join 我得到了:

enter image description here

通过简单的 Inner Join 我得到了:

enter image description here

我对SQL执行计划不太友好。

我只是想知道 Inner JoinInner Remote Join 之间哪个更好。

谢谢

最佳答案

如果您查看消息选项卡,您会看到

Warning: The join order has been enforced because a local join hint is used.

当您使用 INNER REMOTE JOIN 提示时,您是在强制表按写入的顺序连接,而不是允许它探索所有可能的连接排列。

因此与指定 OPTION (FORCE ORDER)

的结果类似

这解释了不同的执行计划。

此提示不适用于本地表。

以这种方式不经意地强制连接顺序会非常不利的示例如下 - 因为它强制大表 A 和 B 先连接,然后再消除 C 上连接的所有行。当优化器不受约束时 (下面的第一个计划)它将事物重新排序为(C x A)x B,并且该计划更有效率。

CREATE TABLE #A(X INT PRIMARY KEY);
CREATE TABLE #B(X INT PRIMARY KEY);
CREATE TABLE #C(X INT PRIMARY KEY);

INSERT INTO #A
SELECT TOP (10000000) ROW_NUMBER() OVER (ORDER BY @@SPID) FROM master..spt_values v1, master..spt_values v2

INSERT INTO #B
SELECT * FROM #A

SELECT *
FROM #A INNER JOIN #B ON #A.X = #B.X
INNER JOIN #C ON #A.X = #C.X

SELECT *
FROM #A INNER REMOTE JOIN #B ON #A.X = #B.X
INNER JOIN #C ON #A.X = #C.X

DROP TABLE #A, #B,#C

enter image description here

关于sql - 内部联接与内部远程联接之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606300/

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