MySQL 8.0.18 優化器添加AntiJoin反連接優化

在MySQL 8.0.18版本里,支持對NOT IN/EXISTS子查詢語句優化,優化器內部將查詢自動重寫爲AntiJoin反連接查詢SQL語句。


通常情況下,我們希望由內到外,先完成內表裏的查詢結果,然後驅動外查詢的表,完成最終查詢,但是子查詢會先掃描外表中的所有數據,每條數據將會傳到內表中與之關聯,如果外表很大的話,那麼性能上將會很差。


讓我們看一個例子

explain select * from t1 where id not in (select id from t2);

anti.png


優化器在內部,是將not in子查詢重寫爲下面的語句

explain select t1.* from t1 left join t2 on t1.id=t2.id where t2.id is null;

left join.png


對比兩個執行計劃,結果是一樣的。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章