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

原文:http://blog.csdn.net/feegle_develop/article/details/5861551

/*
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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值