《Mysql應(yīng)用mysql查詢語(yǔ)句in與exists區(qū)別與性能分析》要點(diǎn):
本文介紹了Mysql應(yīng)用mysql查詢語(yǔ)句in與exists區(qū)別與性能分析,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
一次面試中被人問(wèn)到in 和 exists的區(qū)別,當(dāng)然只是草草做答,現(xiàn)在來(lái)做下分析.MYSQL實(shí)例
mysql中的in語(yǔ)句是把外表和內(nèi)表作hash 連接,而exists語(yǔ)句是對(duì)外表作loop循環(huán),每次loop循環(huán)再對(duì)內(nèi)表進(jìn)行查詢.
一直大家都認(rèn)為exists比in語(yǔ)句的效率要高,這種說(shuō)法其實(shí)是不準(zhǔn)確的.這個(gè)是要區(qū)分環(huán)境的.
?
如果查詢的兩個(gè)表大小相當(dāng),那么用in和exists差別不大.
如果兩個(gè)表中一個(gè)較小,一個(gè)是大表,則子查詢表大的用exists,子查詢表小的用in:
例如:表A(小表),表B(大表)
?
1:
?MYSQL實(shí)例
2:
?MYSQL實(shí)例
not in 和not exists如果查詢語(yǔ)句使用了not in 那么內(nèi)外表都進(jìn)行全表掃描,沒(méi)有用到索引;
而not extsts 的子查詢依然能用到表上的索引.所以無(wú)論那個(gè)表大,用not exists都比not in要快.
in 與 =的區(qū)別
?MYSQL實(shí)例
的結(jié)果是相同的.MYSQL實(shí)例
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6196.html