一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Sql語句中IN和exists的區(qū)別及應用

 自然科學思維 2017-10-30

表展示

    首先,查詢中涉及到的兩個表,一個user和一個order表,具體表的內容如下:

    user表:

    

    order表:

    

 

  in

    確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。

    具體sql語句如下:

1 SELECT 2 * 3 FROM 4 `user` 5 WHERE 6 `user`.id IN ( 7 SELECT 8 `order`.user_id 9 FROM10 `order`11 )

    這條語句很簡單,通過子查詢查到的user_id 的數據,去匹配user表中的id然后得到結果。該語句執(zhí)行結果如下:

    

    它的執(zhí)行流程是什么樣子的呢?讓我們一起來看一下。

    首先,在數據庫內部,查詢子查詢,執(zhí)行如下代碼:

SELECT            `order`.user_id FROM            `order`

    執(zhí)行完畢后,得到結果如下:

    

    此時,將查詢到的結果和原有的user表做一個笛卡爾積,結果如下:

    

    此時,再根據我們的user.id IN order.user_id的條件,將結果進行篩選(既比較id列和user_id 列的值是否相等,將不相等的刪除)。最后,得到兩條符合條件的數據。
    

  exists

    指定一個子查詢,檢測行的存在。遍歷循環(huán)外表,然后看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。

    具體sql語句如下:

1 SELECT 2 `user`.* 3 FROM 4 `user` 5 WHERE 6 EXISTS ( 7 SELECT 8 `order`.user_id 9 FROM10 `order`11 WHERE12 `user`.id = `order`.user_id13 )

    這條sql語句的執(zhí)行結果和上面的in的執(zhí)行結果是一樣的。

    

    但是,不一樣的是它們的執(zhí)行流程完全不一樣:

    使用exists關鍵字進行查詢的時候,首先,我們先查詢的不是子查詢的內容,而是查我們的主查詢的表,也就是說,我們先執(zhí)行的sql語句是:

     SELECT `user`.* FROM `user` 

    得到的結果如下:

    

    然后,根據表的每一條記錄,執(zhí)行以下語句,依次去判斷where后面的條件是否成立:

EXISTS (        SELECT            `order`.user_id FROM            `order`        WHERE            `user`.id = `order`.user_id    )

    如果成立則返回true不成立則返回false。如果返回的是true的話,則該行結果保留,如果返回的是false的話,則刪除該行,最后將得到的結果返回。

  區(qū)別及應用場景

    in 和 exists的區(qū)別: 如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。其實我們區(qū)分in和exists主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists,那么以外層表為驅動表,先被訪問,如果是IN,那么先執(zhí)行子查詢,所以我們會以驅動表的快速返回為目標,那么就會考慮到索引及結果集的關系了 ,另外IN時不對NULL進行處理。

    in 是把外表和內表作hash 連接,而exists是對外表作loop循環(huán),每次loop循環(huán)再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。

  not in 和not exists

    如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。


    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    69老司机精品视频在线观看| 国产亚洲不卡一区二区| 99久久精品一区二区国产| 欧美一区二区三区性视频| 久久精品视频就在久久| 国产级别精品一区二区视频 | 国产精品二区三区免费播放心| 国产精品免费视频视频| 亚洲中文字幕在线观看黑人| 国产视频在线一区二区| 99热在线精品视频观看| 日本黄色美女日本黄色| 亚洲性生活一区二区三区| 91精品国产综合久久精品| 国产精品亚洲综合天堂夜夜| 国产色一区二区三区精品视频| 国产剧情欧美日韩中文在线| a久久天堂国产毛片精品| 日韩精品毛片视频免费看| 亚洲男女性生活免费视频| 欧美午夜国产在线观看| 亚洲精品小视频在线观看| 夜夜嗨激情五月天精品| 亚洲一区二区精品免费| 亚洲欧美日韩国产成人| 亚洲欧美日韩熟女第一页| 亚洲熟女熟妇乱色一区| 亚洲精选91福利在线观看| 果冻传媒精选麻豆白晶晶| 男女一进一出午夜视频| 色一欲一性一乱—区二区三区| 免费性欧美重口味黄色| 日韩女优精品一区二区三区| 国产亚洲不卡一区二区| 中文字幕亚洲人妻在线视频 | 日本一品道在线免费观看| 国内真实露脸偷拍视频| 国产午夜精品久久福利| 老司机这里只有精品视频| 欧美三级大黄片免费看| 久久精品中文字幕人妻中文|