IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率
2010-09-03 15:20
423 查看
/*
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秒
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
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秒
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
相关文章推荐
- IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率
- IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率
- in,not in,exists,not exists的区别及not exists 代替max查询效率更高
- Oracle,用left join 替代 exists ,not exists,in , not in,提高效率
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- sql中 in , not in , exists , not exists效率分析
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- sql Exists in 文章1:SQL里的EXISTS与in、not exists与not in 效率比较和使用
- SQL查询中in、exists、not in、not exists的用法与区别
- oracle中in和exists、not in和not exists的用法与效率
- 数据库查询优化之用exists替换in,not exists替换not in
- SQL里的EXISTS与in、not exists与not in 效率问题
- IN和EXISTS、not in 和not exists的效率详解
- SQL的EXISTS与in、not exists与not in 效率比较和使用
- SQL里的EXISTS与in、not exists与not in 效率比较和使用(转)
- SQL里的EXISTS与in、not exists与not in 效率比较和使用
- SQL语句优化—in,not in,exists,not exists, left join...on
- sql的一个查询,情景:a表中存在的数据,且在b表中不存在 (not in,not exists
- SQL里的EXISTS与in、not exists与not in
- sql中的in与not in,exists与not exists的区别