一.Oracle vs MySQL
1.性能不分高低,在于使用方式,扬长避短
Oracle强大到几乎能做所有事情 ----- 强大的计算节点
MySQL主要还是用来存储数据和简单查询 ----- 定位为存储节点
MySQL对复杂查询/数据分析支持偏弱,需要业务改造或是通过其他方式来支持
2.不管Oracle/MySQL,复杂SQL总是成为系统不稳定的主要因素,出问题通常也都是复杂SQL(执行计划走错)导致的,化繁为简。
3.锁差异
Oracle锁加在数据块上,InnoDB锁加在主键索引上,所以InnoDB总是有主键索引。
4.导入导出数据
Oracle采用EXP/IMP导入导出。
MySQL采用mysqldump导出,导入可以采用管道或source。mysqldump –u用户 –p密码 DB [table1 table2…] > db.sql
5.提交方式
MySQL默认自动提交,Oracle默认手动提交,MySQL大批量操作最好改变为手动提交,SET AUTOCOMMIT=0
6.SQL缓存
MySQL只能缓存结果集,不能缓存SQL解析结果
7.数据库对象
Oracle将数据库对象编译存储,直接执行二进制码,MySQL只存储代码,临时解析执行,所以MySQL触发器、存储过程等对象创建时仅检查语法,并不检查逻辑。
8.MySQL对子查询会处理为临时表,所以一般JOIN效率比做子查询高。
9.MySQL在JOIN中对ORDER BY、GROUP BY优化较弱,JOIN中的排序分组几乎都会使用Fille Sort和临时表。
10.MySQL只有RBO,没有CBO,所以总是选择类型上最优的执行计划,而不一定是开销最小的。
11.MySQL对于OR,很多时候并不会优化成两次索引访问或合并索引,所以OR最好写成两条SQL,做UNION ALL。
12.IN中存在NULL条件,可能会让优化器走成全表扫描。
二.去Oracle的关键点
1.去”IOE”,大部分精力oracle到MySQL改造上
a. 集中式改造到分布式(非必选)
b. 复杂SQL改造
c. 存储过程/函数的改造
d. 数据无缝迁移到MySQL上
e. 数据分析的改造
2.功能:Oracle 到 MySQL 功能上落差大,存储过程,join
3.高可用:小型机,存储高冗余机制,PC怎么做
4.数据一致性:Oracle物理级别的一致, MySQL有没有问题
细分:如何去存储过程;如何无缝数据迁移;如何分库分表分事务;如何数据路由;如何异构数据实时同步;如何数据安全;如何面对规模运维。
三.应用的改造点
1.数据库的本质还是存储数据,Oracle基本上能把所有事情都做掉(将计算推向数据),使用MySQL要把业务处理重新剥离到应用程序来做(将数据推向计算)。
2.改造点:
a.应用逻辑重新梳理重构,进行服务化;服务化不仅是确定功能接口,更重要的是定义SLA(对外提供的QPS、RT等性能指标)
b.根据数据库特性重构应用,让MySQL数据库做擅长的事情(存储数据)
c.MySQL一定要去避免大SQL,大事务,大批量,分步骤实现化繁为简
d.DB扩展难,而APP很容易扩展,尽量在应用程序实现业务逻辑和计算
e.DB单实例满足可能需要做数据库拆分(先垂直在水平),拆分的解决方案
3.使用MySQL把握住:
a.用来存储数据
b.ACID支持
c.处理简单查询。
四.MySQL本身的硬伤
1.Join查询/子查询/复杂查询。
2.数据分析
3.单实例性能瓶颈(分布式带来的问题?)
4.MySQL的门槛(bug,使用门槛,debug)
五.MySQL开发规范
1.基本要求
a.尽量不在数据库做运算
b.控制单表数据量(控制在500万级别)
c.平衡范式和冗余,适当的在表中冗余字段,减少关联查询
d.数据库不能随意线性扩展,资源宝贵,应用能做的尽量不用数据库
e.规范化,不因为赶工期代码一塌糊涂
f.SQL处理上,尽量化复杂为简单,复杂SQL拆分为多步骤实现,拒绝大SQL/大事务
2.字段/表
a.字段多使用数字(int)类型而不是字符型(varchar)
b.字段尽量设置为not null
c.表必须要有主键,最好是自增主键,一定是innodb引擎。
d.少用字段text,blob类型,不用数据库存储图片
e.表不使用外键,应用保证一致性
3.SQL写法
a. 使用单表查询,关联查询控制在2个表以内
b. 禁止使用子查询(in,exists),尽量使用join关联查询改写
c. 对复杂SQL进行拆分,借用临时表或是其他保留中间结果集,或是分多个步骤
d. 存储过程/函数通过应用程序来改写掉。
e. Where后面的条件不使用函数转化比如where inst(a,’xx’)=
f. 所有SQL都要去REVIEW才能上线,确保性能,合理使用索引,
g. 避免使用select *
h. 使用MySQL 高效分页优化写法
i. 注意SQL规范,避免字段类型隐式转换比如where name=123
j.批量数据导入尽量使用load data,或是insert values, values,values而不是单条导入
相关推荐
本示例"mysql和Oracle的多数据源配置demo"聚焦于如何在SpringBoot框架下同时集成和管理MySQL与Oracle这两种不同的数据库系统,以实现多数据源的配置。这在需要处理不同数据库类型或者需要实现数据冗余和故障切换的...
在对比MySQL与Oracle数据库性能的讨论中,我们通常会从几个关键方面进行分析,包括但不限于事务处理(INSERT、UPDATE、DELETE)、查询效率(SELECT)、硬件资源利用、SQL语法及优化、存储引擎和架构差异等方面。...
MySQL 5.7加入了对Where条件过滤的索引支持,而Oracle利用位图索引在数据仓库和决策支持系统中表现突出。 对于查询优化,Oracle提供了丰富的提示(hints)来指导优化器,而MySQL使用force index/use index来优化...
然而,在某些情况下,可能需要将Mysql数据库的数据迁移到Oracle数据库,比如业务扩展、系统升级或者为了利用Oracle特有的功能。"Convert Mysql to Oracle"这个工具就是为了解决这个问题而设计的。 数据迁移是一个...
- 性能:Oracle在处理大型对象时可能更具优势,因为它可以利用分区和索引优化。 - Unicode支持:Oracle的`NCLOB`专门用于Unicode字符数据,而MySQL需要通过`CHARSET`参数指定字符集来处理不同编码。 4. 使用建议...
总的来说,这个项目展示了如何利用SpringBoot的灵活性和强大功能,结合Oracle和MySQL的特点,以及Druid的数据连接池优势,实现大规模数据的双数据库同步,同时通过流处理策略有效地避免了内存溢出的问题。...
在本篇文章中,我们将详细探讨如何在Windows Server 2012环境下,利用Oracle 11.2版本的数据库来通过透明网关访问MySQL 5.7数据库。该过程涉及服务器配置、数据库权限设置、ODBC驱动安装配置、网络配置以及Oracle...
通过本文介绍的方法,开发者可以利用ODBC技术轻松地让C#应用程序与MySQL和Oracle数据库建立连接,并且实现了基本的事务处理功能。这种方法不仅简化了数据库连接的过程,还提高了代码的复用性,降低了维护成本。此外...
标题“通过MySQL通过视图访问ORACLE中的表”意味着我们将探讨如何利用MySQL的视图功能,来间接访问和操作Oracle数据库中的数据。视图是一种虚拟表,它不实际存储数据,而是根据用户定义的SQL查询动态生成结果集。这...
本案例主要探讨的是如何实现MySQL和Oracle数据库之间的数据同步。这两个数据库系统在业界广泛应用,它们各自具有独特的特性和优势,但有时需要将数据在两者之间进行迁移或实时同步。 MySQL是一款开源、轻量级的关系...
支持Mysql与oracle自动在excel中生成创建sql语句,非常强大,如果想使用sqlserver看我上一资源
MySQL和Oracle都是广泛使用的数据库管理系统,它们在企业级应用中占据着重要的地位。为了与Java应用程序进行交互,我们需要对应的数据库驱动程序,这就是JDBC(Java Database Connectivity)驱动。本压缩包提供了...
### MySQL与Oracle数据库的主要区别 #### 一、并发性 **MySQL**的并发处理主要依赖于不同的存储引擎。默认情况下,MySQL使用表级锁(table-level locking),这意味着当某个会话(session)对一张表进行锁定时,...
本压缩包提供了连接MySQL和Oracle数据库的连接池组件,使得开发人员能够在同一应用中便捷地处理这两种不同的数据库系统。 1. **连接池的概念**: 连接池是一种数据库管理策略,它预先创建并维护一定数量的数据库...
在IT领域,数据库迁移是一项复杂但至关重要的任务,尤其是在从MySQL迁移到Oracle这样的场景下。以下是对这一过程的深入解析,旨在为面临相似挑战的技术人员提供实用指导。 ### MySQL迁移至Oracle的关键步骤 #### 1...
对于复杂的应用逻辑,可能需要重构代码,或者利用MySQL的用户定义函数(UDF)来模拟Oracle的功能。 为了保证服务的连续性,可以采用分阶段迁移或双栈策略。在迁移初期,保持Oracle和MySQL并行运行,新产生的数据...
JDBC为不同的数据库提供了一个统一的访问方式,无论是MySQL还是Oracle,或者其他支持JDBC的数据库,都可以通过Java代码进行操作。 **JDBC的基本概念** 1. **驱动程序**: JDBC驱动程序是Java和数据库之间的桥梁,...
Java开发人员可以利用Java Database Connectivity (JDBC) API来与MySQL通信。`mysql-connector-java-5.0.8-bin.jar`是MySQL的Java驱动程序,它包含了Java代码,使得Java应用程序能够连接到MySQL服务器,执行SQL语句...
本资源“java连接mysql-oracle源码整理”聚焦于如何使用Java连接两种主流的关系型数据库管理系统:MySQL和Oracle。 一、Java与MySQL连接 1. **JDBC驱动**:Java Database Connectivity (JDBC) 是Java平台的标准...
- **Oracle**:利用`ROWNUM`实现分页。 **3. DATE类型处理** - **MySQL**:DATE类型的灵活性较高,支持更多的日期格式和操作。 - **Oracle**:相对较为固定,但提供了丰富的日期函数支持。 **4. LEFT函数** - ...