小编Pra*_*uka的帖子

外部应用与左连接性能

我正在使用 SQL SERVER 2008 R2

我刚刚在 SQL 中遇到 APPLY 并且喜欢它如何解决如此多情况下的查询问题,

我使用 2 个左连接来获得结果的许多表,我能够获得 1 个外部应用。

我的本地数据库表中有少量数据,部署后代码应该在至少 20 倍大的数据上运行。

我担心对于大量数据,外部应用可能需要比 2 个左连接条件更长的时间,

谁能告诉我 apply 究竟是如何工作的,以及它如何影响非常大数据的性能,如果可能的话,每个表的大小有一些比例关系,比如与 n1^1 或 n1^2 成比例......其中 n1 是表中的行数1.

这是带有 2 个左连接的查询

select EC.*,DPD.* from Table1 eC left join
  (
   select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2
   group by member_id,parent_gid,child_gid,LOB,group_gid

  ) DPD2 on DPD2.parent_gid = Ec.parent_gid
        AND DPD2.child_gid = EC.child_gid
        AND DPD2.member_id = EC.member_id
        AND DPD2.LOB = EC.default_lob
        AND DPD2.group_gid = EC.group_gid
  left join
  Table2 dpd on dpd.parent_gid = dpd2.parent_gid 
            and …
Run Code Online (Sandbox Code Playgroud)

join sql-server cross-apply

41
推荐指数
1
解决办法
8万
查看次数

加入条件和左加入中的条件

STUDENT 表包含我学校数据库中的学生列表

LIBRARY_BOOK 表包含当前与任何学生一起使用的每本书的信息。

每个学生一次只允许携带一本书。

我想知道

每位 7 年级学生的图书馆图书。

我使用的是 Microsoft SQL Server 2008 R2

我有几个看起来几乎相似但行为方式不同的查询。

查询 1:

Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
WHERE ST.Class = 7
Run Code Online (Sandbox Code Playgroud)

查询 2:

Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
AND ST.Class = 7
Run Code Online (Sandbox Code Playgroud)

查询 3:

Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
AND ST.Class = 7
WHERE ST.Class = 7
Run Code Online (Sandbox Code Playgroud)

有人可以解释这些查询在输出和性能方面的区别吗?

join

1
推荐指数
1
解决办法
105
查看次数

标签 统计

join ×2

cross-apply ×1

sql-server ×1