1、如果條件字段都是非索引字段,那么效率都差不多,就看結(jié)果大小。
2、有差別的在于條件字段是索引字段時:
“=”在索引的情況下都會進(jìn)行索引掃描,所以效率總是高的。
“l(fā)ike”當(dāng)模糊查詢?yōu)橛夷:?比如'abc%'時,掃描索引,高效。當(dāng)模糊查詢含左模糊時,比如'%abc',進(jìn)行全表掃描,低效。
“in”的作用等同于or,也是進(jìn)行索引掃描,高效。
另外,“in”還可以連接查詢結(jié)果集,這時往往會和exists做比較。
a、select * from t1 where f1 in(select f1 from t2 where t2.fx='x'),其中子查詢的where里的條件不受外層查詢的影響,這類查詢一般情況下,自動優(yōu)化會轉(zhuǎn)成exist語句,也就是效率和exist一樣。
b、select * from t1 where f1 in(select f1 from t2 where t2.fx=t1.fx),其中子查詢的where里的條件受外層查詢的影響,這類查詢的效率要看相關(guān)條件涉及的字段的索引情況和數(shù)據(jù)量多少,一般效率不如exists,數(shù)據(jù)量大時,效果就更加明顯。