暂无图片
SQL优化改写
我来答
分享
暂无图片 匿名用户
SQL优化改写

现有如下 SQL

select * from a where a.id in (select id from b);


假设 a 有 1000 万,b 有 100 行,请问如何优化该 SQL?

假设 a 有 100 行,b 有 1000 万,请问如何优化该 SQL?

假设 a 有 100 万,b 有 1000 万,请问如何优化该 SQL?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
chengang

如果两表ID是一一对应的。mysql 可改造成inner join

暂无图片 评论
暂无图片 有用 8
广州_老虎刘

oracle的优化器会根据不同的数据分布, 生成对应的执行计划, 不需要改写:   

场景1的执行计划应该是b去重后Nested loops a;  

场景2的执行计划应该是a Nested Loops b; 

场景3的执行计划应该是hash join (semi), 还会根据具体的数据分布情况, 再做细分(b表id字段的重复度,a表的字段个数等)

以上分析的假设前提是id字段的唯一值较多, 而且存在索引. 如果子查询的id字段是主键或唯一, 优化器会直接转换成inner join.

这是最基本的查询转换, 相信大部分国产数据库也能实现.

暂无图片 评论
暂无图片 有用 9
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏