join left 大数据_大数据量下not in, not exists, left join的比较

/*

IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率

*/

IF OBJECT_ID('A') IS NOT NULL

DROP TABLE A

GO

CREATE TABLE A

(

ID INT

)

GO

IF OBJECT_ID('B') IS NOT NULL

DROP TABLE B

GO

CREATE TABLE B

(

ID INT

)

GO

DECLARE @ID INT,@IDD INT

SET @ID=1

SET @IDD=2

WHILE @ID<1000000

BEGIN

INSERT INTO A VALUES (@ID)

INSERT INTO B VALUES (@IDD)

SET @ID=@ID+1

SET @IDD=@IDD+2

END

GO

--总结:表A中的数据在表B中存在的效率比较 INNER JOIN = EXISTS = IN

SELECT *

FROM A

WHERE ID IN (SELECT ID FROM B)--4秒

GO

SELECT *

FROM A

WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.ID)--4秒

GO

SELECT A.ID,B.ID

FROM A

INNER JOIN B

ON A.ID=B.ID--4秒

GO

--总结:表A中的数据在表B中不存在的效率比较 LEFT JOIN > NOT EXISTS > NOT IN

SELECT *

FROM A

WHERE ID NOT IN (SELECT ID FROM B)--45秒(本机测试20秒)

GO

SELECT *

FROM A

WHERE NOT EXISTS (SELECT * FROM B WHERE A.ID=B.ID)--4秒

GO

SELECT A.ID,B.ID

FROM A

LEFT JOIN B

ON A.ID=B.ID

WHERE B.ID IS NULL--3秒

GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值