我正在使用 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) 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)
有人可以解释这些查询在输出和性能方面的区别吗?