sql-server – 使用LEFT JOIN或NOT EXISTS之间的最佳实践
发布时间:2020-12-26 02:10:19 所属栏目:MsSql教程 来源:网络整理
导读:使用LEFT JOIN或NOT EXISTS格式之间是否有最佳实践? 使用一个而不是另一个有什么好处? 如果没有,哪个应该是首选? SELECT *FROM tableA ALEFT JOIN tableB B ON A.idx = B.idxWHERE B.idx IS NULL SELECT *FROM tableA AWHERE NOT EXISTS(SELECT idx FROM t
|
使用LEFT JOIN或NOT EXISTS格式之间是否有最佳实践? 使用一个而不是另一个有什么好处? 如果没有,哪个应该是首选? SELECT *
FROM tableA A
LEFT JOIN tableB B
ON A.idx = B.idx
WHERE B.idx IS NULL
SELECT * FROM tableA A WHERE NOT EXISTS (SELECT idx FROM tableB B WHERE B.idx = A.idx) 我在Access中使用SQL Server数据库中的查询. 解决方法最大的区别不在于连接vs不存在,它是(如编写的)SELECT *.在第一个示例中,您将获得A和B中的所有列,而在第二个示例中,您只获得A中的列. 在SQL Server中,第二个变体在一个非常简单的设计示例中稍快一些: 创建两个示例表: CREATE TABLE dbo.A
(
A_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
CREATE TABLE dbo.B
(
B_ID INT NOT NULL
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
);
GO
在每个表中插入10,000行: INSERT INTO dbo.A DEFAULT VALUES; GO 10000 INSERT INTO dbo.B DEFAULT VALUES; GO 10000 从第二个表中删除每第5行: DELETE FROM dbo.B WHERE B_ID % 5 = 1; SELECT COUNT(*) -- shows 10,000 FROM dbo.A; SELECT COUNT(*) -- shows 8,000 FROM dbo.B; 执行两个测试SELECT语句变体: SELECT *
FROM dbo.A
LEFT JOIN dbo.B ON A.A_ID = B.B_ID
WHERE B.B_ID IS NULL;
SELECT *
FROM dbo.A
WHERE NOT EXISTS (SELECT 1
FROM dbo.B
WHERE b.B_ID = a.A_ID);
执行计划: 第二个变体不需要执行过滤操作,因为它可以使用左反半连接运算符. (编辑:均轻资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 关于XHTML的H1标记的位置
- sql-server – 用于邮件,文件和数据库存储的理想服务器规格
- SQLserver 数据库危险存储过程删除与恢复措施
- sql-server-2008 – 如何将值从动态SQL存储过程返回到实体框
- sql-server – SQL Server怀疑数据库?
- sql-server – 存档旧数据
- .net – SQL0469 IN,OUT或INOUT对过程中的参数2无效
- sql-server – 服务代理已备份,现在正在接收,但似乎没有处理
- sql-server – 当包装在TVF中时,查询变得非常慢
- sql-server – 将SQL Server数据库从旧生产服务器移动到新服
站长推荐
热点阅读


