exist和in

A:select 字段 from a where id in (select id from b)

B:select 字段 from a where id exist (select id from b)

這兩條SQL語句看上去差別不大,數(shù)據(jù)量一大了,效率的差距還是很明顯的

兩條SQL出現(xiàn)這個(gè)差距的主要原因還是執(zhí)行順序不同,A先執(zhí)行子查詢再執(zhí)行主表查詢,而B正好相反先查詢主表再查詢子查詢。用小表來驅(qū)動(dòng)大表,簡單來說讓先執(zhí)行的表是小表就可以了

所以我們得到的結(jié)論就是 b是小表,a是大表可以用in;a是小表,b是大表可以用exist。需要注意的是如果遇到了not in和not exist的直接用not exist,因?yàn)閚ot in不走索引,其實(shí)走不走索引也要看mysql版本,不同版本情況不一樣

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 涉及知識(shí):in 和 exist的原理問題現(xiàn)象:在應(yīng)收應(yīng)付的單據(jù)相關(guān)業(yè)務(wù)中,出現(xiàn)了明顯的SQL效率問題。SQL執(zhí)行耗...
    小漠窮秋閱讀 2,444評(píng)論 0 1
  • EXIST 和in都是表示在某個(gè)范圍,查詢結(jié)果相同,但是有前后驅(qū)動(dòng)的區(qū)別。 #對B查詢涉及id,使用索引,故B表效...
    純純的真閱讀 815評(píng)論 0 0
  • 簡單介紹 主要用于聯(lián)合查詢 詳細(xì)例子 exists exists表示()內(nèi)子查詢語句返回結(jié)果不為空說明where條...
    蘊(yùn)重Liu閱讀 1,447評(píng)論 0 1
  • in 是把外表和內(nèi)表作hash 連接,而exists是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進(jìn)行查詢。 一...
    金融測試民工閱讀 981評(píng)論 0 0
  • 轉(zhuǎn)載自 weiyi1314 exists對外表用loop逐條查詢,每次查詢都會(huì)查看exists的條件語句,當(dāng) ex...
    賽亞人之神閱讀 1,612評(píng)論 0 0

友情鏈接更多精彩內(nèi)容