网站首页 > 技术文章 正文
大家知道么,之前在oracle中随便使用的子查询语句,在mysql中虽然语法上支持,但是是不建议使用的。那如果涉及到迁移的时候,如何处理呢?
可以使用join的方式。
比如 in或者exists的改造:
select * from wentian1 t1 where exists(select id from wentian2 t2 where t1.id = t2.id and t2.name = '张三')
可以修改成:
select t1.* from wentian1 t1 join (select id from wentian2 t2 where t2.name = '张三') on t1.id = t2.id
not in和not exists的改造
select * from wentian1 t1 where not exists(select id from wentian2 t2 where t1.id = t2.id and t2.name = '张三')
可以修改成:
select t1.* from wentian1 t1 left join (select id from wentian2 t2 where t2.name = '张三') t3 on t1.id = t3.id where t3.id is null
那剩下的问题是为什么不建议使用子查询呢?
核心原因还是虽然mysql貌似使用范围很广,但是它在很多方面的优化确实距离商业化数据库oracle还是有差距的。oracle的缺点就是贵,且是国外的,且是不开源的。除此之外,一切都好,在使用的时候不需要考虑那么多,用就行了。
而mysql就需要考虑的很多了。比如在mysql中就不建议使用子查询主要的原因是在mysql中子查询会生成一张临时表,而创建和销毁这个临时表就会消耗额外的资源。而且对子查询的查询范围是没有限制的,如果关联的表数据量多了,也会成为瓶颈。
所以最优的方案其实不是上面的关联,最优的方案是单表查询一张表,查询出结果之后在应用层面循环查询另外一张表,这样的好处是可以在应用层面进行抽象,加入缓存层之类的。当然如果业务逻辑上不允许的话,上面的迁移方案也是一种选择。
------------------------
欢迎访问个人网站:
https://lessthinker.com
欢迎关注个人公众号:虾响
猜你喜欢
- 2024-10-25 云祺& Oracle网络研讨会,与国内备份厂商首次线上联合
- 2024-10-25 在 Oracle 的跟踪文件(.trc 文件)中,"PARSING IN CURSOR" 含义
- 2024-10-25 oracle密码过期 oracle 密码过期
- 2024-10-25 DHL将关键业务流程迁移到Oracle Fusion Cloud Applications Suite
- 2024-10-25 Oracle为Oracle Fusion Cloud Applications Suite新增强大的AI功能
- 2024-10-25 All In ai,Oracle 23C没了,等来了Oracle 23ai
- 2024-10-25 FIND_IN_SET 及IN 处理逗号间隔的字符串参数
- 2024-10-25 oracle数据库中INITCAP()、LOWER()与UPPER()函数的用法
- 2024-10-25 Oracle 锁以及几种锁模式 oracle锁定
- 2024-10-25 MyBatis的几种批量操作,有必要掌握
你 发表评论:
欢迎- 630℃几个Oracle空值处理函数 oracle处理null值的函数
- 623℃Oracle分析函数之Lag和Lead()使用
- 612℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 606℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 604℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 596℃【数据统计分析】详解Oracle分组函数之CUBE
- 586℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 570℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- oracle 19cOCM认证有哪些内容(oracle认证ocm月薪)
- Oracle新出AI课程认证,转型要持续学习
- oracle 表的查询join顺序,可能会影响查询效率
- Oracle DatabaseAmazon Web Services正式可用,Oracle数据库上云更容易了
- Oracle 19.28 RU 升级最佳实践指南
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
- 如何主导设计一个亿级高并发系统架构-数据存储架构(三)
- Java 后端开发必看!工厂设计模式轻松拿捏
- ORA-00600 「25027」 「x」报错(抱错孩子电视剧 爸爸是武术 另一个爸爸是画家)
- 新项目终于用上了jdk24(jdk新建项目)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)