MySQL PostgreSQL vs. 该怎样选呢
当天咱们就来聊聊PostgreSQL和MySQL,大象和海豚咱们究竟该选哪个呢?
先放一张对比表格:
编程言语 |
||
存储引擎 |
||
暂时表 |
在DROP TABLE语法中没有TEMP或许TEMPORARY关键字 |
在DROP TABLE语法语句中支持TEMP或许TEMPORARY关键字,只准许删除暂时表。 |
支持CASCADE删除表的依赖对象的选项,例如表和视图。 |
||
PostgreSQL TRUNCATE TABLE支持更多性能,如CASCADE、RESTART IDENTITY、CONTINUE IDENTITY、 事务安保等。 |
MySQL TRUNCATE TABLE 不支持CASCADE和事务安保。数据一旦删除,就无法回滚。 |
|
支持许多初级类型,例如 arrayhstore用户定义的 type |
||
同时支持常量和函数调用 |
必定是常量或许TIMESTAMP或许DATETIME 列设置CURRENT_TIMESTAMP为自动值 |
|
有(MySQL 8.0.16支持, 之前MySQL只是疏忽审核) |
||
存储环节语法 |
||
有. MySQL支持笼罩索引,准许仅经过扫描索引来检索数据,而无需接触表数据。这关于具备数百万行的大型表来说是无利的。 |
||
支持可以在大少数类型的命令上触发的触发器,但影响全局数据库的触发器除外,例如角色和表空间。 |
||
RANGE、LIST、HASH、KEY 以及经常使用 RANGE 或 LIST 与 HASH 或 KEY 子分区组合的复合分区 |
||
每个新衔接都是一个操作系统 |
每个新衔接都是一个操作系统 |
看完上方的表格,咱们基本上对PostgreSQL和MySQL之间的差异有了大略的了解,上方咱们具体的说明一下:
语法
就语法而言,Postgresql 和 MySQL 都很相似。以下是两者的选用查问:
SELECT * FROM STUDENTS;
但是,MySQL 不支持多个子查问,例如“LIMIT”或“ALL”。它也不支持规范 SQL 子句,例如“INTERSECT”或“OUTER JOIN”。
MySQL 不像 PostgreSQL 那样齐全兼容 SQL,后者支持上述一切子查问。假设您的业务须要经常经常使用这些子查问,那么 PostgreSQL 将是更适宜的选用。
支持的言语
PostgreSQL 和 MySQL 支持许多相反的言语,但存在一些差异。
另一方面,PostgreSQL 提供对更宽泛的编程言语的支持:
以下是 MySQL 支持的言语列表:
速度
在选择最适宜您的业务需求的数据库时,速度是一个无法或缺的要素。极速的数据库不只可以确保您的网站运转得更快,而且还可以经过指出可以删除的未经常使用数据来协助减轻主机的压力。
PostgreSQL 和 MySQL 都因是市场上最快的 DBMS 处置打算而知名。但是,这一类别中没有清楚的赢家。您可以很容易地找到基于性能、测试和配件介绍一种数据库的基准测试。一个或许在并发性方面占据下风,而另一个或许在内存很少的单核机器上体现更好。
最终,这取决于您如何经常使用它们。妇孺皆知,MySQL 在只读命令方面速度更快,但代价是并发性较高,而 PostgreSQL 在读写操作、海量数据集和复杂查问方面体现更好。
体系结构
MySQL 是一个纯相关数据库,而 PostgreSQL 是一个对象相关数据库。PostgreSQL 提供更复杂的数据类型,并准许对象承袭属性。另一方面,它也使得经常使用 PostgreSQL 变得愈加复杂。PostgreSQL 领有一个繁多的、合乎 ACID 的存储引擎。除了自动存储引擎 InnoDB 之外,MySQL 还支持 15 种不同的存储引擎。少量的存储引擎准许您极速将它们用于其余用例。
PostgreSQL 经过内存调配为每个建设的客户端衔接生成一个新的系统进程。这须要具备许多客户端衔接的系统上的少量内存。另一方面,MySQL 经常使用单个进程并为每个衔接保养一个线程。这使得 MySQL 成为企业范围以下运行程序的更适宜选用。
体现
PostgreSQL 的构建是为了合乎规范、性能丰盛且可裁减。此前,PostgreSQL 的性能体现颠簸——读取通常比 MySQL 慢,但它可以更有效地写入少量数据。除此之外,PostgreSQL 比 MySQL 更好地处置并发性。
在过去几年中,他们的才干之间的差距已清楚增加。假设您经常使用旧的 MyISAM 引擎,MySQL 读取数据的速度依然相当快。它还启动了优化,以在少量数据写入方面赶上 PostgreSQL。
在为您的目标选用适宜的工具时,性能不应成为大少数个别运行程序的解放要素。PostgreSQL 和 MySQL 的性能在很大水平上是相反的。
复制和集群
复制是一个准许开发人员将数据从数据库复制到其正本数据库的环节。这确保了每个用户都领有相反级别的信息。复制还带来了各种好处,例如容错、可裁减性、智能备份以及在不影响主集群的状况下口头常年间查问的才干。
MySQL 和 PostgreSQL 都支持复制。PostgreSQL提供同步复制,这象征着它有两个数据库同时运转,并且主数据库与正本数据库同步。您甚至可以经常使用 PostgreSQL 口头同步和级联复制。但是,在 MySQL 中,复制是单向异步的。这象征着一台数据库主机充任主数据库主机,其余数据库主机充任正本。
MySQL 和 PostgreSQL 都支持集群。集群应用共享存储将相反的数据集复制到环境中的每个节点。这使得数据库能够容忍缺点,由于在环境中的各个节点之间复制数据所发生的冗余。
数据和表结构
JSON 支持依然是 MySQL 归入的上游 NoSQL 性能之一。相比之下,PostgreSQL 支持用户定义的类型、数组、hstore 和 XML。能够处置更少数据类型的关键好处是性能的参与。例如,经过接受数组作为数据类型,PostgreSQL 还可以提供与这些数组兼容的主机函数。
但是,虽然经常使用代替格局存储数据具备长处,但口头此类数据格局或许会愈加复杂,由于它们不遵照常年的基准。因此,与数据库一同经常使用的组件或许并不总是遵照 PostgreSQL 格局。
MySQL在SQL合规性方面仅局部兼容SQL,由于它不支持像无审核解放这样的一切性能。也就是说,它确实提供了很多裁减。
相比之下,PostgreSQL 比 MySQL 更合乎 SQL 规范,支持大少数关键 SQL 性能 —准确地说,支持 179 个强迫性能中的 160 个。
可裁减性
PostgreSQL 被以为是一种高度可裁减的工具,由于它支持 MySQL 中找不到的各种初级数据类型。这将包含网络地址类型、本机 UUID、几何/GIS、可索引的 JSON 以及时区感知期间戳。假设这没有使 PostgreSQL 在这一轮中成为清楚的赢家,您可以参与运算符、数据类型和索引类型。
因此,假设您的运行程序正在处置非结构化数据或任何可用的共同数据类型,PostgreSQL 或许是更好的选用。但是,假设您只处置基本的数字和字符数据类型,那么这两个数据库都应该可以反常上班。
索引
为了提高数据库性能,您可以在处置大型数据表时经常使用索引来减速 SQL 查问。假设没有索引,查问将会很慢,并且会成为 DBMS 的关键累赘。
PostgreSQL 和 MySQL 都提供不同的索引选项。PostgreSQL 索引类型包含以下几种:
另一方面,MySQL 提供以下索引选项:
安保
PostgreSQL和MySQL都支持组和用户治理,并为各种角色授予SQL权限。MySQL 支持本机窗口服务、PAM 和 LDAP 启动用户身份验证,而 PostgreSQL 支持经常使用 Kerberos 和 PAM 的基于 IP 的客户端身份验证和过滤。因此,这两个数据库在安保性方面不相高低。
支持与社区
PostgreSQL 和 MySQL 都有有用的社区来为用户提供支持。
PostgreSQL 领有庞大的志愿者社区,他们经过邮件列表和 IRC 向用户提供收费倡导。除此之外,您甚至可以经过第三方提供商购置付费支持。您甚至可以经过阅读市场上各种有用的 PostgreSQL 书籍和手册来扫除缺点。
MySQL 也有一个庞大的志愿者社区,他们会花期间为您提供收费倡导和支持。您可以在 Percona 和 MySQL 网站上应用此类支持。除了收费社区支持之外,Oracle 还为其一切产品的商业版本提供 24/7 付费支持。与 PostgreSQL 一样,您也可以经过深化钻研少量收费且有用的 MySQL 指南、书籍和教程来启动缺点扫除。
总而言之,对 PostgreSQL 的支持或许有点具备应战性,由于它须要更多的技术专业常识来设置和经常使用。此外,目前可供您经常使用的 PostgreSQL 专家数量少于 MySQL 专家数量。所以,在用户支持和治理繁难性方面,MySQL稍逊一筹。
总结
总的来说,Postgres 有更多性能、更兴盛的社区和生态;而 MySQL 则更易学习并且领有庞大的用户个体。
咱们观察到了与 Stack Overflow 结果相反的行业趋向,即 Postgres 在开发者中变得越来越受欢迎。但依据咱们的实践体验,精细的 Postgres 就义了一些便利性。假设你想经常使用Postgres最好多看看文档,并运转几个查问来上手,有一些学习老本,MySQL 会更容易一些。有时刻,性能多并不象征着好,择适宜自己的才是最好的 。