mySQL中in查詢與exists查詢的區別小結_Mysql

來源:互聯網
上載者:User

一、關於exists查詢

explain select * from vendor where EXISTS(select * from area where area_code = vendor_prov_code ) limit 10

以上是一個典型的exists查詢的sql語句。

它的作用方式是這樣的:每次從vendor表中查詢出一條資料,然後將這條資料中的vendor_prov_code值傳遞到exists查詢中進行執行,也就是進行子查詢的執行。

如果子查詢查到的資料就返回布爾值true,如果沒有就返回布爾值false。返回布爾值true則將該條資料儲存下來,否則就捨棄掉。也就是說exists查詢,是查詢出一條資料就執行一次子查詢。

需要注意的是:exists …. 只能返回布爾值true或者false,其他的欄位並不會進行返回的。

二、關於in查詢

explain select * from vendor where vendor_prov_code in (select area_code from area ) limit 10

上面就是一條關於in查詢的sql語句。

它的作用方式是這樣的:先執行子查詢,也就是in()所包含的語句。子查詢查詢出資料以後,將前面的查詢分為n次普通查詢(n表示在子查詢中返回的資料行數)。也就是例如以下的執行步驟:

select * from doub_vendor where vendor_prov_code = 子查詢結果1..............select * from doub_vendor where vendor_prov_code = 子查詢結果n

網上有人在爭exists查詢與in查詢的效率問題,這裡得說以下,不同的mysql版本,不同的業務,不同的資料,執行效率是不一定的,這裡涉及到了mysql最佳化器對sql語句的最佳化,子查詢的資料量問題等等。

網上還有人說mysql5.6版本對in查詢做了很好的最佳化,所以效率問題要看具體的情境,要看真實測試的資料來進行最佳化!

總結

以上就是Mysql中in查詢與exists查詢區別的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.