MySQL与Oracle主键Query性能测试结果

From:DBA同事的测试结果

为了让大家更详细的了解Oracle和MySQL的差异和适用场景,为数据库选型提供帮助,我们对MySQL和Oracle的按主键Query做了一些测试。希望对大家在数据库选型和了解Oracle/MySQL异同时有所帮助。

测试结果总结如下:

1. 按主键读:
SQL形式:SELECT * FROM table WHERE id=?。

1.1. 主键为数字。如果所有ID均不存在,纯比较SQL解析能力。
MySQL解析SQL的速度约是Oracle的2倍。
原因在于MySQL优化器代码简单,动态规划的深度限制为64层,能较好的控制解析SQL的时间。

1.2. 主键为数字。如果所有ID均存在,且完全随机分布。
低并发(<=16)时MySQL的每秒处理查询数(QPS)落后Oracle 30%左右,并发量增大后(>=32),落后Oracle一半左右。

1.3. 主键为数字。如果所有ID均存在,ID随机范围控制在一定范围。(ID 在 [minID, maxID] 范围内)
随着ID范围的缩小,实际访问的数据就越小,重复读到一条数据的概率增高,多次测试后,MySQL与Oracle的差距在减小,当控制的范围数据约等于InnoDB Buffer Pool的大小时,与Oracle的差距不再明显。
减少数据量的测试结果也基本相似,数据量减小到约等于MySQL Buffer Pool的大小时,与Oracle的差距较小。
由此可以判断,MySQL的缓存替换算法较Oracle存在一定的差距。InnoDB的预读准确率没有Oracle高,所以当数据量减少的时候,Oracle的预读准确率并不会有太大的提高,但是InnoDB随着数据量的减少,预读的准确性就会有较大的提升。

1.4. 主键为字符串。
Oracle的效率和MySQL差距缩小,低并发时MySQL还略高于Oracle。
同比MySQL主键为数字和字符串时,查询性能差距比较小,主键为字符串效率略低与数字主键。Oracle差距则很大,浮动最大达50%。

2. 随机插入:
SQL形式:INSERT INTO table (col) VALUES (?);

2.1. 主键为数字自增。

低并发(<=16)插入时,效率基本没有差异,当并发量提高 (>=32)时,MySQL的插入效率明显下降,Oracle采用序列,默认情况下插入速度高于MySQL,并发量提高这个差距越扩大。
原因在于,Oracle的序列有自己的锁,不与表的锁混用,MySQL默认情况下,自增的锁与表锁合一,每次获取自增值都回带来一次表锁,这会严重的限制并发量。同时MySQL开启了binlog,这会比Oracle带来更多的日志记录,除了undo log/redo log,还多了binlog。
但是MySQL InnoDB在5.1版本中提供了一个innodb_autoinc_lock_mode参数,如果设置为0,则出现上述情况,如果设置为1,采用 Auto_increment 独立的轻量锁,则效果改善很多,高并发时(>=32)与Oracle也基本本没有差距,在5%左右,到128依然没有明显的差距。

2.2. 主键为字符串时。

字符串无需的情况下,MySQL的插入效率明显下降,低并发时(<=16)下降约为30%,高并发时(>=32)可以达到 50%。Oracle则变化不大。
原因在于,MySQL InnoDB的主键和数据是一起的,如果主键无序插入,每次插入都会带来主键索引的调整,这是一笔非常大的开销。即使字符串有序插入,由于字符串占用长度大于数字,存取主键的开销会略大,较数字主键依然会有15%左右的性能差据。

3. 随机更新:
SQL形式:UPDATE SET col=xxx WHERE ID=?;

无论主键为数字或者字符串,MySQL的更新效率都要高于Oracle。
数字主键时,低并发时(<=16)效率高15%左右,高并发时(>=32)效率高10%左右。
字符串主键时,在数字主键上再提高5%左右,MySQL在处理字符串主键时比Oracle效率高。
原因在于MySQL的轻量,UPDATE只需要一个主键行锁,更新主键索引即可,没有任何主键位置的变动,也不需要回表访问数据块,所以效率较高。

总的来说,MySQL轻量、InnoDB的聚集索引,适合在简单的业务场景使用,性能并不逊于Oracle。存在复杂的SQL,高并发场景,MySQL单实例性能是逊于Oracle的,但是没有事务的情况下依靠分库,可以化解这些问题。但是复杂业务逻辑、高并发的事务处理,并不适合MySQL,Oracle更适合这种场景。

MySQL和Oracle都有自己适合的地方,合适的就是最好的。

__________ Information from ESET NOD32 Antivirus, version of virus signature database 5448 (20100913) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com

__________ Information from ESET NOD32 Antivirus, version of virus signature database 5448 (20100913) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com

转载于:https://blog.51cto.com/tianya23/391540

MySQL与Oracle主键Query性能测试结果相关推荐

  1. sqlserver新增主键自增_深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id i ...

  2. 深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: 复制代码 代码如下: create table c ...

  3. MySQL 和 Oracle 主键自增长

    1.MySQL 1)建表 auto_increment:每插入一条数据,客户表(customers)的主键id就自动增1,如下所示 1 create table customers -- 创建客户表 ...

  4. MySQL与Oracle主键冲突解决方式

    1.MySQL主键冲突 当主键冲突时,可以选择更新或替换 1.1 主键冲突 主键冲突: mysql> desc my_class; +-------+-------------+------+- ...

  5. Mysql,SqlServer,Oracle主键自动增长的设置

    Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...

  6. mybatis 实现oracle主键自增的机制

    本篇文章将研究mybatis 实现oracle主键自增的机制 首先我们看对于同一张student表,对于mysql,sql server,oracle中它们都是怎样创建主键的 在mysql中 [sql ...

  7. mybatis获取mysql自增主键_Mybatis获取数据库自增主键

    一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样 //测试添加 Employee employee = new Employee(null, "jerry4",n ...

  8. mybatis mysql自增主键_mybatis 自增主键配置

    mybatis 自增主键配置 mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同.基本上经常会 遇到的就是 Oracle Seque ...

  9. mysql 主键删除数据库_【数据库】mysql如何删除主键?

    当一个表中设置了主键之后,如果想要删除主键了要怎么做?下面本篇文章就给大家介绍MySQL删除主键的方法,希望对你们有所帮助. 首先我们来看看删除主键的语法: ALTER TABLE TABLE_NAM ...

最新文章

  1. 编码字典类特征、使用sklearn的DictVectorizer方法将字典组成的列表转换成向量、详解及实战
  2. Serverless 工程实践 | Serverless 应用开发观念的转变
  3. SQL Server 2008 开启远程连接
  4. mysql 多表备份_mysql备份与恢复多库多表备份
  5. javscript对cookie的操作,以及封装
  6. oracle 创建表中又有表,oracle创建表
  7. 配置Debian11服务器允许root用户远程SSH登录
  8. Android Studio优秀插件汇总
  9. (1)、win10 本地 安装 rabbitmq
  10. TypeScript keyof 用法
  11. 40个超有趣的Linux命令行彩蛋和游戏
  12. 代尔夫特理工大学计算机科学排名,2019-2020代尔夫特理工大学世界排名多少【QS最新第50名】...
  13. 10 令牌颁发 OAuth2TokenEndpointFilter
  14. Web前端如何进行SEO结构优化
  15. 2022年京东年货节活动玩法:头号京贴每满200减30、限时红包雨
  16. 计算机lad指令什么意思,LAD 文件扩展名: 它是什么以及如何打开它?
  17. linux 删除变为空格
  18. 误删了php文件怎么恢复,【问题】phpstorm误删文件后,恢复成了0KB
  19. OA平台——协同管理与办公自动化
  20. 解读BPM风潮:缘何受到企业青睐?(转)

热门文章

  1. wps中的word中公式复制完后是图片
  2. 2022 极术通讯-安谋科技“星辰”STAR-MC2处理器初探
  3. matlab作业1,matlab作业报告一
  4. WIN10任务栏的喇叭点了没反应,但是声音是正常的,就是不能调节音量
  5. 达人评测华为MatePadPro2怎么样
  6. 轻松Git与Github入门
  7. 广东省韶关计算机学校,广东韶关市华粤电脑技术学校
  8. axure树形表格_表格 树形菜单/excel 如何实现分级显示,也就是树形的菜单
  9. cad直线和圆弧倒角不相切_CAD圆角、倒角分不清?详细讲解CAD圆角与倒角对象的区别和技巧...
  10. 第五人格显示服务器错误,第五人格服务器异常玩家秒变GM,时装随便买,玩家:这感觉真好!...