导读:在本文中,我们将讨论工作负载分析和运行查询,一起了解两个数据库系统在 JSON、索引和并发方面的性能差异。

简介

在管理数据库时,性能是一项非常重要而又复杂的任务。它可能会受到系统的配置、硬件甚至设计的影响。有趣的是,PostgreSQL和MySQL都配置了兼容性和稳定性,这取决于我们的数据库设计的硬件基础架构。

虽然PostgreSQL(或Postgres)和MySQL有一些相似之处,但它们也有独特的特性,在特定情况下,其中一个会更优秀。在表现方面,他们有很多不同。

在本文中,我们将讨论工作负载分析和运行的查询。然后,我们将进一步解释一些基本配置,以改进MySQL和PostgreSQL数据库的性能。之后,我们将概述MySQL和PostgreSQL之间的一些关键区别。

如何衡量性能

MySQL作为快速读取大量工作负载的数据库而享有盛誉,尽管在与写入操作混合使用时经常牺牲并发性。

PostgreSQL(俗称Postgres)将自己展示为最先进的开源关系数据库,并且已开发为符合标准且功能丰富的数据库。

以前,Postgres的性能更加平衡,即,读取通常比MySQL慢,但后来它得到了改进,现在可以更有效地写入大量数据,从而使并发处理更好。MySQL和Postgres的最新版本略微消除了两个数据库之间的性能差异。

在MySQL中使用旧的MyISAM 引擎可以非常快速地读取数据。不幸的是,在最新版本的MySQL中尚不可用。但是,如果使用InnoDB(允许关键约束,事务),则差异可以忽略不计。这些功能对于企业或消费者规模的应用程序至关重要,因此不能选择使用旧引擎。好消息是,MySQL不断得到改进,以减少大量数据写入之间的差异。

甲数据库基准是用于表征和比较的性能(时间,存储器,或质量)可再现的试验框架数据库在这些系统上的系统或算法。这种实用的框架定义了被测系统,工作量,指标和实验。

在接下来的4部分中,我们将概述MySQL和PostgreSQL之间的一些关键区别。

JSON查询在Postgres中更快

在本节中,我们将看到PostgreSQL和MySQL之间的基准测试差异。

执行的步骤

  1. 创建一个项目(Java,Node或Ruby),其中使用的DB是PostgreSQL和MySQL。

  2. 创建一个示例JSON对象以执行WRITE和READ操作。

  3. 整个JSON对象的大小假定为〜14 MB,在数据库中创建约200–210个条目。

统计数据

PostgreSQL:平均时间(毫秒):写:2279.25 | 阅读:31.65 | 更新:26.26

MySQL:平均时间(以毫秒为单位):写:3501.05 | 阅读:49.99 | 更新:62.45

指标

索引是所有数据库中的关键因素。它提高了数据库性能,因为它允许数据库服务器查找和检索特定行比没有索引快得多。但是,索引整体上给数据库系统增加了特殊的开销,因此应该明智地使用它们。如果没有索引,则数据库服务器将从第一行开始,然后通读整个表以找到相关的行:表越大,操作成本就越高。PostgreSQL和MySQL都有处理索引的特定方法。

  • 标准B树索引:PostgreSQL包括对常规B树索引和哈希索引的内置支持。PostgreSQL中的索引还支持以下功能:

  • 表达式索引:可以使用表达式或函数结果的索引而不是列的值来创建。

  • 部分索引:仅索引表的一部分。

让我们假设我们在PostgreSQL中有一个名为users的表,其中表中的每一行代表一个用户。该表定义如下。CREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR DEFAULT NULL, name VARCHAR); 现在,让我们假设我们在上表中创建以下索引。

上面显示的两个索引有什么区别?第一索引#1是部分索引,而索引#2是表达式索引。如PostgreSQL文档所述,

“部分索引建立在由条件表达式定义的表中的行的子集上(称为部分索引的谓词)。索引仅包含满足谓词的那些表行的条目。使用局部索引的主要原因是避免索引常见的值。由于查询通常会出现的值(占所有表行百分之几的查询)无论如何都会遍历大多数表,因此使用索引的好处是微不足道的。更好的策略是创建部分索引,其中这些行完全排除在外。部分索引减少了索引的大小,因此加快了使用索引的查询的速度。它还将加快许多写入操作的速度,因为不需要在所有情况下都更新索引”-部分索引的文档-Postgres Docs。

MySQL:大多数MySQL索引(PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)都位于B树中。例外包括使用R树的空间数据类型的索引。MySQL还支持哈希索引,而InnoDB引擎对FULLTEXT索引使用倒排列表。

数据库复制

涉及到PostgreSQL和MySQL的另一个性能差异是复制。复制是将数据从一个数据库服务器复制到另一台服务器上的另一数据库的能力。信息的这种分布意味着用户现在可以访问数据而不会直接影响其他用户。数据库复制的困难任务之一是协调整个分布式系统中的数据一致性。MySQL和PostgreSQL提供了几种可能的数据库复制选项。除了一个主服务器,一个备用数据库和多个备用数据库之外,PostgreSQL和MySQL还提供以下复制选项:

多版本并发控制

当用户同时读写数据库时,这种现象称为并发。因此,多个客户端同时读取和写入会导致各种边缘情况/竞赛条件,即,对于相同的记录X和许多其他条件,先读取后写入。各种现代数据库都利用事务来减轻并发问题。

Postgres是第一个推出多版本并发控制(MVCC)的DBMS,这意味着读取永远不会阻止写入,反之亦然。此功能是企业偏爱Postgres而不是MySQL的主要原因之一。

“与大多数其他使用锁进行并发控制的数据库系统不同,Postgres通过使用多版本模型来维护数据一致性。此外,在查询数据库时,每个事务都会看到一段时间的数据快照(数据库版本)。以前,无论基础数据的当前状态如何,它都可以保护事务避免查看由同一数据行上的(其他)并发事务更新引起的不一致数据,从而为每个数据库会话提供事务隔离。” 多版本并发控制” — PostgreSQL文档

MVCC允许多个读取器和写入器同时与Postgres数据库进行交互,从而避免了每次有人与数据进行交互时都需要读写锁的情况。附带的好处是此过程可显着提高效率。MySQL 利用InnoDB存储引擎,支持同一行的写和读,以免彼此干扰。MySQL每次将数据写入一行时,也会将一个条目写入回滚段。此数据结构存储用于将行恢复到其先前状态的“撤消日志”。之所以称为“回滚段”,是因为它是用于处理回滚事务的工具。

“ InnoDB是一个多版本存储引擎:它保留有关已更改行的旧版本的信息,以支持诸如并发和回滚之类的事务功能。该信息存储在表空间中称为回滚段的数据结构中(在类似数据之后)。InnoDB使用回滚段中的信息来执行事务回滚中所需的撤消操作。它还使用该信息来构建行的早期版本以实现一致的读取。” - InnoDB的多版本- MySQL的MVCC

结论

在本文中,我们处理了PostgreSQL和MySQL之间的一些性能差异。重要的是要注意,数据库性能取决于其他几个因素,例如硬件,操作系统类型,最重要的是,您对目标数据库的理解。PostgreSQL和MySQL都有其独特的特质和缺点,但是了解什么功能适合项目并集成这些功能最终会提高性能。

我很想听听您在数据库性能方面的经验。

作者:Blessing Krofegha
来源:https://dzone.com/articles/performance-differences-between-postgres-and-mysql

推荐阅读:
世界的真实格局分析,地球人类社会底层运行原理不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)亿级(无限级)并发,没那么难论数字化转型——转什么,如何转?华为干部与人才发展手册(附PPT)企业10大管理流程图,数字化转型从业者必备!【中台实践】华为大数据中台架构分享.pdf华为的数字化转型方法论华为如何实施数字化转型(附PPT)超详细280页Docker实战文档!开放下载华为大数据解决方案(PPT)

PostgreSQL 和 MySQL 之间的性能差异相关推荐

  1. mysql odbc ado性能差异_ODBC、OLEDB和ADO之间的关系 ,以及性能比较

    学习了.net视频之后,对里面涉及到的数据库连接部分中的一些概念表示很无语.网上很多相关资料,但除了网站不一样外,基本上内容都神一样的一致. 现在,我就通过结合看到的一些资料再加上自己的理解试图去解释 ...

  2. oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比

    最近因为工作需要,需要对Oracle和Mysql写入性能进行对比,以前都是听说Mysql性能比Oracle不是一个级别,现在亲测后,不比不知道,一比吓一跳... 追加PostgreSql性能测试数据 ...

  3. oracle读写速率,Oracle、PostgreSQL与Mysql数据写入性能对比

    最近因为工作需要,需要对Oracle和Mysql写入性能进行对比,以前都是听说Mysql性能比Oracle不是一个级别,现在亲测后,不比不知道,一比吓一跳... 追加PostgreSql性能测试数据 ...

  4. python跟java 效率_对比平台--Java与Python之间的性能差异

    ava Performance和Python之间的主要区别 以下是描述Java Performance和Python之间的区别的要点列表: 以下是Java性能与Python之间的主要区别,我们在决定应 ...

  5. PostgreSQL 与 MySQL:有什么区别?

    PostgreSQL 和 MySQL 在用途.好处.特性和特点上的异同 PostgreSQL 和 MySQL 是将数据组织成表的关系数据库.这些表可以根据每个表共有的数据链接或关联.关系数据库使您的企 ...

  6. redshift mysql_和支持的 Amazon Redshift 与 PostgreSQL 数据库之间的数据类型差异MySQL - Amazon Redshift...

    本文属于机器翻译版本.若本译文内容与英语原文存在差异,则一律以英文原文为准. 和支持的 Amazon Redshift 与 PostgreSQL 数据库之间的数据类型差异MySQL 下表显示了 Ama ...

  7. Mysql之count(*),count(1),count(field)区别、性能差异

    目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...

  8. MySQL数据库az排序_RDS Mysql Single-AZ和Multi-AZ性能差异

    RDS Mysql Single-AZ和Multi-AZ性能差异 发布时间:2020-07-14 22:56:21 来源:51CTO 阅读:4401 作者:hsbxxl 高可用性,是很多数据库工程师/ ...

  9. distinct mysql性能_MySQL中distinct与group by之间的性能进行比较

    最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...

最新文章

  1. 实验室信息管理系统(LIMS)知识大全
  2. 底层技术决定人工智能“跑速” | 科技心语
  3. 全国首家工资总额负面清单管理试点企业获批
  4. html图片往左,如何用js把一张图片由右向左展开?
  5. SIP.conf的常用参数配置
  6. jquery-绑定事件与解除事件的绑定
  7. android 模拟点击home,Android launcher中模拟按home键的实现
  8. 【SQL】电商网站各模块指标的统计以及分析
  9. 清华大学开源用于网络嵌入的工具包 OpenNE
  10. 通过OpenSSL创建自签名证书在Flask实现HTTPS
  11. 教你在网吧“移”电影
  12. JavaScript笔记(菜鸟教程)
  13. SNN系列|神经元模型篇(2) Izhikevich
  14. 即使不跳槽,你也应该做的三件事情
  15. chapter-2数据库基本知识
  16. 延时100ms c语言程序,C51单片机延时时间的计算方法解析
  17. 南加大计算机游戏专业,南加州大学计算机科学理科硕士(游戏发展)入学条件及实习就业...
  18. prev_permutation 函数
  19. android 16进制/10进制/2进制转换
  20. 使用ColorUI小程序自定义导航栏

热门文章

  1. SPOON资源库中查找表
  2. 从酒鬼失足到赌徒破产,悲剧收场为何注定
  3. 定时任务框架Quartz-(一)Quartz入门与Demo搭建
  4. WIN7 64位 x64虚拟网卡驱动
  5. java宝石迷阵代码_Android处理java的date数据的问题
  6. 【快速查看 Excel工作表sheet个数】
  7. C# 汉字转GB2312 编码
  8. 2021年熔化焊接与热切割考试及熔化焊接与热切割考试题
  9. 互联网/移动互联网小团队创业 第一集 汪华(zz)
  10. 润乾报表制作折叠报表