暂无图片
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
打赏 0
广州_老虎刘

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

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

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

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

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

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

暂无图片 评论
暂无图片 有用 9
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
oracle 备份集保留6个月,控制文件会很大吗
回答 3
已采纳
其实controlfile中不需要保留太旧的备份信息,因为过期被删除的备份信息,如果需要恢复,可以重新注册到控制文件中。注册单个备份文件:RMAN>catalogdatafilecopy'/ba
Oracle Database Concepts怎么去下载?
回答 1
已采纳
https://docs.oracle.com/en/database/oracle/oracledatabase/19/cncpt/databaseconcepts.pdf19c目前没有中文版
请问oracle10g集群怎么启动监听?
回答 1
srvctlstartlistenern<节点名>lLISTENER
Trace Bucket Dump 在trace目录的文件中的信息是否需要关注并解决
回答 1
可以用tkprof命令解析一下这些后缀为.trc的trace文件,看着像是对数据库开启trace没有关掉
oracle 如何对表dml进行监控?
回答 2
已采纳
可以自己写个触发器,然后结合其他监控平台或者短信平台实现告警信息推送,也可以通过监控工具进行定制,开源的如zabbix、Prometheus等,也可以通过结合审计工具,定制触发机制,实现监控。
oracle 11g where条件 还是自右向左执行吗?
回答 1
这是RBO的规则,从10g开始默认就是CBO了,where后面的顺序没有关系。《在Oracle中,什么是RBO和CBO?》
请教oracle11g开启ssl的配置方法,感谢[抱拳]
回答 4
后边解决了么?
oracle 11g 已转换完成的快照库 执行shutdown immediate 会自动删除快照吗?
回答 1
已采纳
不会
AWR分析报告问题求助:帮忙出一下优化思路
回答 3
GC等待锁等待从sql看也是2个DML消耗最长,建议同一个应用只连RAC的其中一个节点
Oracle 如果要查询加速,已经设置了多字段复合unique索引,还需要分开设置单字段索引吗?
回答 1
已采纳
要看你where后面的条件是否全部按顺序使用到了多字段复合unique索引,否则不一定走复合unique索引。