hive中 exists的底層實現為left semi join。
驗證:
對比發現執行計划一樣,都是left semi join實現。 且,left semi join前,會對t2表group by;
explain select t1.* from t1 left semi join t2 on t1.id=t2.id;
explain select t1.* from t1 where exists(select 1 from t2 where t1.id=t2.id);
初步結論
所以如果使用exists或left semi join語法,性能一樣。
值得注意的是,t2表重復數據多的場景,應該是一樣的。
如果t2表沒有重復數據,也就不需要group by,此時可以選擇使用join語法代替,當然這個需要抽時間驗證研究一番。
