中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sql中in與exist效率是怎么樣的

發布時間:2022-01-19 10:51:01 來源:億速云 閱讀:206 作者:小新 欄目:數據庫

這篇文章將為大家詳細講解有關sql中in與exist效率是怎么樣的,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、IN 與EXISTS
1、理解

IN的執行流程
SELECT * FROM T1 WHERE X IN (SELECT Y FROM T2)
事實上可以理解為:
SELECT * FROM T1, (SELECT DISTINCT Y FROM T2) T2 WHERE T1.X =T2.Y
從這里可以看出,IN需要先處理T2表,然后再和T1進行關聯

EXISTS的執行流程

SELECT *FROM T1 WHEREEXISTS (SELECT
NULLFROM T2 WHEREY = X)--可以理解為:for xin (select
* fromt1 ) LOOP    if( exists ( selectnull
from t2where y =x.x )THEN        OUTPUTTHE RECORD    endifend loop

從這里看出,EXISXTS會先查詢T1表,然后再LOOP處理T2表

2、結論
對于in 和 exists的區別: 如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in,反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。其實我們區分in和exists主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists,那么以外層表為驅動表,先被訪問,如果是IN,那么先執行子查詢,所以我們會以驅動表的快速返回為目標,那么就會考慮到索引及結果集的關系了。
綜合以上對IN/EXISTS的討論,我們可以得出一個基本通用的結論:IN適合于外表大而內表小的情況;EXISTS適合于外表小而內表大的情況。

二、NOT IN 與NOT EXISTS
1、理解

NOT IN的執行流程
SELECT * FROM T1 WHERE X NOT IN (SELECT Y FROM T2)
事實上可以理解為:
SELECT * FROM T1, (SELECT DISTINCT Y FROM T2) T2 WHERE T1.X !=T2.Y

NOT EXISTS的執行流程

SELECT .. ...  FROMROLLUP R WHERE NOTEXISTS (SELECT'Found'
FROM
TITLE TWHERE R.SOURCE_ID = T.TITLE_ID);--可以理解為:for xin (select
* fromrollup )       loop           if(
not exists ( that query ) ) then                  OUTPUT           endif;        end;

注意:NOT EXISTS 與 NOT IN不能完全互相替換,看具體的需求。如果選擇的列可以為空,則不能被替換。具體見:in/exists和notin/not exists語意探討

2、結論
not in 只有當子查詢中,select 關鍵字后的字段有not null約束或者有這種暗示時用notin,另外如果主查詢中表大,子查詢中的表小但是記錄多,則應當使用not in,并使用anti hashjoin.如果主查詢表中記錄少,子查詢表中記錄多,并有索引,可以使用not exists,另外not in最好也可以用或者外連接+isnull.一般情況下建議使用not exists

--比如:SELECT .. ....  FROMROLLUP R WHERE NOTEXISTS (SELECT'Found'
FROM
TITLE TWHERE R.SOURCE_ID = T.TITLE_ID);--改成SELECT .. ....  FROMTITLE T, ROLLUP
R WHERE R.SOURCE_ID =T.TITLE_ID(+)   ANDT.TITLE_ID
IS
NULL;--或者SELECT.... ..  FROMROLLUP R WHERE OURCE_IDNOT
IN
       (SELECTOURCE_ID
FROM TITLE TWHERE OURCE_ID
IS
NOT NULL);

關于“sql中in與exist效率是怎么樣的”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁德市| 刚察县| 琼海市| 铜川市| 会理县| 新闻| 望城县| 正镶白旗| 得荣县| 宜兰县| 牡丹江市| 武穴市| 雷波县| 萨嘎县| 无极县| 五家渠市| 临海市| 福建省| 灌南县| 萍乡市| 克山县| 涿州市| 日喀则市| 柳江县| 安吉县| 中阳县| 民乐县| 泰顺县| 白河县| 锡林郭勒盟| 葵青区| 巢湖市| 忻城县| 加查县| 启东市| 渑池县| 米林县| 香港| 新乐市| 永安市| 临安市|