NOT IN查詢示例(示例背景描述:根據條件查詢Questions表得到的數據基本在PostedData表中不存在,為完全保證查詢結果在PostedData表中不存在,使用NOT IN): 查詢耗時如圖: 換用NOT EXISTS 查詢示例: 查詢耗時如圖: 根據查詢耗時明顯可以看出,使用 NOT ...
NOT IN查詢示例(示例背景描述:根據條件查詢Questions表得到的數據基本在PostedData表中不存在,為完全保證查詢結果在PostedData表中不存在,使用NOT IN):
SET STATISTICS PROFILE ON; SET STATISTICS IO ON; SET STATISTICS TIME ON; GO /*--你的SQL腳本開始*/ SELECT A.Id FROM dbo.Questions A WITH ( NOLOCK ) WHERE A.QuestionState = '正常' AND A.CheckTime > '2018-09-29 16:00:00' AND A.StateShowID NOT IN ( SELECT B.IntId FROM dbo.PostedData B WHERE B.[Type] = 'question' ); /*你的SQL腳本結束*/ GO SET STATISTICS PROFILE OFF; SET STATISTICS IO OFF; SET STATISTICS TIME OFF;
查詢耗時如圖:
換用NOT EXISTS 查詢示例:
SET STATISTICS PROFILE ON; SET STATISTICS IO ON; SET STATISTICS TIME ON; GO /*--你的SQL腳本開始*/ SELECT A.Id FROM dbo.Questions A WITH ( NOLOCK ) WHERE A.QuestionState = '正常' AND A.CheckTime > '2018-09-29 16:00:00' AND NOT EXISTS ( SELECT B.IntId FROM dbo.PostedData B WHERE B.[Type] = 'question' AND A.StateShowID = B.IntId ); /*你的SQL腳本結束*/ GO SET STATISTICS PROFILE OFF; SET STATISTICS IO OFF; SET STATISTICS TIME OFF;
查詢耗時如圖:
根據查詢耗時明顯可以看出,使用 NOT EXISTS 比NOT IN 的查詢速度快很多。
But,我做了其他條件下的一些實驗,發現根據條件查詢A表得到的結果,在B表中存在時,兩種查詢的查詢速度差異不大。還有一些情況NOT EXISTS的查詢速度比NOT IN慢。