暂无图片
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


请输入正文
提交
相关推荐
Orcle 查询报表,从A账套查询出的结果,想要模糊匹配到B账套,怎么进行模糊匹配啊
回答 3
把第一部分写成视图或者用子查询或者用with,后面就是关联查询:SQL>selectfromtest1;IDNAME1dc2bbSQL>selectfromtest;IDNAME1ab2a
Oracle 怎么查看存储过程结果?
回答 2
使用plsqldev工具: 右击程序名, 选择测试,输入In参数,点击执行,out参数的值就会显示出来。 
oracle最新的版本是多少?
回答 3
20c啊,可以看一下杨长老的这个《Oracle19c和20c新特性解密杨廷琨》
sql数据库查询数据量太大查不出来
回答 3
已采纳
使用explian查看下执行计划,根据extra列进行优化可以看看之前墨天轮大神留的文档:https://www.modb.pro/db/47381
SQL里怎么实现达到 like in 这种效果?
回答 1
已采纳
1、regexplike(name,’[ABC]’)相当于(like‘%A%’orlike‘%B%’orlike‘%C%’);2、测试SQL>selectfromt1;NAMEABCDSQL&g
数据库数据达到百万级别时候,查找性能低,针对这种大数据做搜索,目前知道的解决方案有solr 和 hibernate search,不知道还有啥其他解决方案,都有啥优缺点?
回答 1
我以前oracle单表100亿级别没有问题。你说的百万级别性能差这是不应该的。请看看你SQL的执行计划是不是全表查询。
静默安装Oracle,执行安装命令时,总出现unzip的使用?
回答 8
信息不够,多贴出来点信息才好知道问题
Oracle授权费用,如果机器是虚拟机,怎么收费?
回答 2
这些东西是可以谈的,你在这里得到的答案都是放在台面上的。
sql有什么好用的编译器啊?有代码提示那种
回答 1
已采纳
1.MSSQLSERVER自己的查询分析器2.SQLPROGRAMMER3.SQLDEV
19c 查询表数据显示问号
回答 3
应该就是字符集的问题