mysql的in和exsits的區別

SELECT * FROM USER
    WHERE id IN (
        SELECT id FROM USER WHERE id%5=1
    )
    
    
SELECT * FROM USER u1
    WHERE EXISTS (
        SELECT u2.id FROM USER u2 WHERE u2.id%5=1 AND u1.id=u2.id
    )

in 是先查出子查詢的結果集,然後和外查詢進行笛卡爾積,相當於雙重for循環進行匹配.

exists 是先查出外循環,然後遍歷每一行結果去執行內查詢看是否返回true.

 

所以,對於exists來說,內層結果集不影響效率,外層結果集的數量嚴重影響效率,如果外層查詢結果很少,適合用exists.

對於in來說,雙重for循環匹配時,內層結果集數量越少,總循環次數期望越少.如果內層查詢結果很少,適合用in

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章