今天跟了一个查询过程,发现速度始终上不去。其中很多地方用NOT IN ,SQL中not in是好读,但效率的确不咋地。。因为他应该是对整个表通读一般(FULL SCAN), 如果数据量稍微大一点,速度就不咋地了,更何况这么多次的NOT IN 调用。。。。头脑一热,全给他改了。改了后效果明显不错。闲来总结了一下,网上也查了下,发现还是一种非主流的做法。有褒有贬,但是用着好用不就行啦!
甩个简单的例子大家来看看。
//速度慢地NOT IN。 随便搞多几W条数据,就发现慢鸟。
SELECT * FROM TAB_A WHERE IID NOT IN (SELECT iid FROM TAB_B)
//改为外连接,可以这样写。效果立竿见影
SELECT * FROM TAB_A.* FROM TAB_A,TAB_B ON TAB_A.IID = TAB_B.IID(+) AND TAB_B.ID IS NULL;