`

利用MySQL去Oracle

阅读更多

一.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而不是单条导入

分享到:
评论
1 楼 csu03zhanglei 2016-12-06  
大牛 。膜拜

相关推荐

    excel自动生成MySQL与oracle创建表语句

    支持Mysql与oracle自动在excel中生成创建sql语句,非常强大,如果想使用sqlserver看我上一资源

    JDBC连接MsSQL/MYSQL/Oracle等多数据库的JSP代码.rar

    本压缩包内含有MSSQL数据库备份文件,以及基于JDBC连接MsSQL/MYSQL/Oracle/Access等常用数据库的示例代码,比较经典的低级问题,笔者也曾遇到过当初学JSp的时候,曾经因为不会连接数据库而很苦恼,这次你可参考...

    Jsp利用JDBC连接MsSQL_MYSQL_Oracle等各种数据库的代码

    Jsp利用JDBC连接MsSQL_MYSQL_Oracle等各种数据库的代码

    一个利用正则表达式分析出DB2、Greenplum、MySQL、Oracle、PostgreSQL和Te-HSP.zip

    一个利用正则表达式分析出DB2、Greenplum、MySQL、Oracle、PostgreSQL和Te-HSP

    在vs2008下用c#实现从mysql 到oracle的数据迁移beta2

    在.net2008下用c#实现从mysql 到oracle的数据迁移 具有定时转移功能。利用odb.net 欢迎提出宝贵意见, 本人系在读研究生。给老板干活。辛苦!!希望您对程序的改进提出宝贵意见:) 我的邮箱: oscarhx@yahoo.cn

    Oracle Database 11g & MySQL 5.6开发手册

    利用《Oracle Database 11g & MySQL 5.6开发手册》,您将能够在混合环境中创建出强大的数据库应用程序。本书规划了这两种平台之间无缝操作的程序设计策略和最佳实践方式。您可以学会如何迁移数据库、移植SQL代码、...

    Oracle Database 11g & MySQL 5.6开发手册 中文版.

    利用《Oracle Database 11g & MySQL 5.6开发手册》,您将能够在混合环境中创建出强大的数据库应用程序。《Oracle Database 11g & MySQL 5.6开发手册》规划了这两种平台之间无缝操作的程序设计策略和最佳实践方式。您...

    MySQL5+MySQL8中文手册(chm文件)

    MySQL5:这是关于5.1版至5.1.2-alpha版MySQL数据库系统的参考...合法的信息,包括许可证信息,看到前言和法律声明利用MySQL的帮助,请访问或MySQL的论坛或MySQL邮件列表,在那里你可以讨论你的问题与其他MySQL用户。

    MySQL8中文参考手册 .chm

    MySQL参考手册。它的文件通过8.0.14 MySQL 8。它可以包括MySQL版本尚未发布功能的文档。关于哪个版本的信息已被...利用MySQL的帮助,请访问或MySQL的论坛或MySQL邮件列表,在那里你可以讨论你的问题与其他MySQL用户。

    Mysql利用group by分组排序

    我们可以利用MySQL中的group by的特性。 MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个...

    Oracle Database 11g & MySQL5.6开发手册.part2

    利用《Oracle Database 11g & MySQL5.6开发手册》,您将能够在混合环境中创建出强大的数据库应用程序。《Oracle Database 11g & MySQL 5.6开发手册》规划了这两种平台之间无缝操作的程序设计策略和最佳实践方式。您...

    Oracle Database 11g & MySQL 5.6开发手册.part1

    利用《Oracle Database 11g & MySQL5.6开发手册》,您将能够在混合环境中创建出强大的数据库应用程序。《Oracle Database 11g & MySQL 5.6开发手册》规划了这两种平台之间无缝操作的程序设计策略和最佳实践方式。您...

    代码生成器tanghc2020 基础包 可自定义模板生成不同的代码,支持MySQL、Oracle、SQL Server

    一款代码生成工具,可自定义模板生成不同的代码,支持MySQL、Oracle、SQL Server、PostgreSQL 首先联网安装docker 利用docker下载公共镜像 docker pull tanghc2020/gen:latest 下载完毕后,执行 docker run -...

    Oracle 19C+13.4EMCC-oem部署和配置(含脚本)

    二、利用EM模板创建pdb 3 1. 上传dbca模板并设置解压 3 2. DBCA建库 4 三、安装EMCC13.4 4 3. Oracle EMCC13.4下载 4 4. 13.4EMCC部署 4 5. 13.4EMCC常见组件 14 6. 13.4EMCC常见命令 18 四、 配置EMCC13.4监控...

    DbVisualizerPro 12.0.7 x86/x64 支持Oracle SQLServer MySQL 等多数据库

    DbVisualizer是一个完全基于JDBC的跨平台数据库管理工具,内置SQL语句编辑器(支持语法高亮),凡是具有JDBC数据库接口的数据库都可以管理,已经在Oracle, SQLServer, Sybase, DB2, MySQL, InstantDB, Cloudcape, ...

    kettle教程初学者教程oracle数据库多表全量同步

    利用kettle和oracle数据库进行多表全量同步教程

    Oracle,SQl,MySql实现分页查询

    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为...

    Java swing mysql(Oracle)实现的飞机订票系统项目源码.zip

    主要是毕业课程设计,利用由Java swing mysql实现的各种场景下的信息管理系统,所涉及的都是常见知识点,有文字视频详细介绍,直接配套成熟源码直接使用,仅供学习交流

    Oracle数据库学习指南

    8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE...

    深入浅出MySQL GTID

    从MySQL 5.6.2新增GTID特性,利用GTID以让我们更加容易的管理MySQL复制,并有效提高数据库一致性。 这次的分享主要针对MySQL GTID展开,主要的分享内容如下: 1、MySQL集群方案 2、MySQL Classic Replication 3、...

Global site tag (gtag.js) - Google Analytics