一句话解释“外连接消除”

外连接消除就是将一个 outer join 转换成 inner join。

例如下面的查询适合做外连接消除:

select * from a left join b on a.pk = b.pk where b.col = 3;

它可以被等价地改写成:

select * from a inner join b on a.pk = b.pk where b.col = 3;

为什么呢?因为这个查询的结果中不可能出现 b 为 NULL 的行,假设有这样的行,它也一定会被 where b.col = 3 过滤掉。这使得使用 outer join 和使用 inner join 的效果等价。

“外连接消除” 最终目的是给优化器带来更多的灵活性,inner join 可以选择的优化路径比 outer join 多得多。

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