2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
为什么经常将in子查询改写为with as呢?
在一些SQL中,in子查询一般比较复杂,想直接使用HINT让in子查询作为嵌套循环驱动表反向驱动主表比较困难,所以经常有将in子查询改写为with as。需要注意的是with as子句中必须要添加/*+ materialize */,同时主表与子查询关联列必须有索引。如果不添加/*+ materialize */、主表与子查询关联列没有索引,优化器就不会自动将with as作为嵌套循环驱动表。with as子句添加了/*+ materialize */会生成一个临时表,这时就将复杂的in子查询简单化了,之后优化器会将with as子句展开(unnesting)。将子查询展开一般是子查询与主表进行HASH连接,或者是子查询作为嵌套循环表与主表进行关联。
评论
有用 9
墨值悬赏