MySQL在某些方面是否比PostgreSQL好?


8

我知道这个问题听起来很挑衅,但事实并非如此。我最近发现MySQL在很多领域都有局限性,并且越来越喜欢PostgreSQL。它的伸缩性更好,并且比MySQL更尊重SQL标准。

我仍然对PostgreSQL领域还不陌生,并且由于我愿意在以后的所有项目中都脱离MySQL,因此我想知道的是:MySQL是否有任何更好的特定功能(如高性能或更加用户友好等。)

我想知道MySQL我会错过什么。我已经发现MySQL中的AUTO_INCREMENT字段比PostgreSQL中的SEQUENCES更方便,并且过去在Windows中的部署是有问题的(不再是问题。对我而言再也不是问题)。

还有什么?


这里有各种各样的好奇心:stackoverflow.com/questions/2221787/...
保罗


我讨厌mysql,但它比PG更容易进行MERGE / UPSERT,而且我发现区分大小写的字段很烦人
Neil McGuigan

Answers:


3

您显然是从开发人员的角度来解决这个问题的,因此您可能会在SO上找到更多有用的答案。

从管理角度:
-复制(HA)
-复制(缩放*)
-复制(备份)
-应用程序支持
-社区的大小和深度(文档,支持)
-现有的安装基础/可用作业

*请注意,您提到了postgres更好的扩展。扩展意味着与每个人不同的东西,但是作为一般规则,具有将负载分散到多个服务器的路径的事物比没有扩展的事物更好。


我对管理方面也很感兴趣。我不确定该在哪里发布。顺便说一句,您在扩展方面是正确的。通过更好的扩展,我真正的意思是在一台计算机上而不是在集群上。MySQL在多核系统上几乎没有性能提升,如今,多核已成为常态。我还看到当工作负载增加时,MySQL从良好的性能变为几乎没有用,给人的印象是postgresql可以更好地处理负载,但是我知道这是有争议的,应该更好地进行查询。顺便说一句,复制参数值得考虑。
Massimiliano Torromeo 2010年

1
MySQL过去在多核上的性能提升很小,但是如果您运行的是补丁完善的5.0版本,几乎任何5.1版本,innodb-plugin(/ xtradb)版本或5.4版本,那就不再是事实了。不试图对抗,但是您的mysql轶事放缓几乎可以肯定已经解决,而您的“印象” postgres会更好地解决这个问题。这里的关键是,从开发理论的角度来看,postgres vs. mysql可能会使您大失所望,但是从运营/业务角度来看,该案例是在多年前结案的。
basketnut

当然,我指定这只是一个印象,因为如果我实际上不尝试在相同的负载下提供相同的数据,我将无法确定,而且我知道我并没有真正证明任何事情。感谢您澄清MySQL的最新性能。
Massimiliano Torromeo

我只是在postgres中总是使用“ serial”类型,我发现它比“ integer auto_increment”更方便。还是您有其他意思?
ptman 2010年

3

使用PSQL时,COUNT(*)也要慢得多。您应该为这种功能创建触发器。


1
有趣,但据我所知,这仅适用于COUNT(*)查询,而没有MyISAM引擎上的where子句。除此之外,它的表现类似。还是与带where子句的InnoDB和MyISAM相比,postgresql还是更慢吗?
Massimiliano Torromeo 2010年

你是什​​么意思 ?从foo中选择count(); 在pgsql中不起作用?尽管在postgres 中count()的确比mysql慢一些,但这是有原因的,并且是一种解决方法。可以在wikivs.com/wiki/MySQL_vs_PostgreSQL
Sibster

1
由于与MySQL的InnoDB相同的原因,它速度较慢,请在此处了解
EarthMind 2010年

3
由于实施了MVCC,COUNT(*)速度较慢。您在读/写性能方面有所提高,但是由于事务可以处于各种状态,因此很难确定“真实”计数是多少。
艾利·佩恩

2

因为Postgres有效地为每个更新执行写时复制(以便它可以处理事务),所以如果您不需要事务,并且相对于读取执行大量写操作,则MySQL不会有PostgreS的开销将。(每个更新的记录都需要写更多,更新索引等)


1
我认为您应该证明这一点。是的,它将更快,但是不能保证数据的一致性。这在某些情况下(从网站上注销用户评论)是完全可以的,但在其他情况下(在线下“购物车”订单)可能会带来问题。
艾利·佩恩

1

我可以想到PostgreSQL缺少的一件事:

我认为阻止,插入或更新也有问题。但是我似乎不记得它到底是什么。:S


1

auto_increment字段“方便”不是很重要吗?Oracle具有序列,无疑是世界上使用最广泛的商业数据库。

如果有更多的崩溃安全信息,可以找到大量有关PostgreSQL如何运行的信息。我只是将您指向PostgreSQL Wiki上的页面(毫无疑问,这是有色人种,但这还是您正在寻找的内容)。

很多人在本页上提到MySQL对新手更友好。所以?向我解释关键任务环境中的问题。


作为序列,使用最广泛的方法不会使auto_increment字段变得更“方便”,这与我有关,因为我要问的是有关2个dbms之间的差异。但这并没有阻止我切换到pgsql,所以我同意这不是一个真正的问题。
Massimiliano Torromeo 2010年

1

MySQL通常称为SQL'ed grep。对我来说(现在是撰写本文时),它看起来和PHP差不多,虽然很尴尬,但却很流行。

我想知道MySQL我会错过什么。

首先尝试重命名数据库。;)然后添加(缺少)条件索引。

PS,我可以指出MySQL至少具有一个无可争议的良好功能—它支持相当节省空间的数据类型,例如,小到(无符号)字节。相应地使用时,这可以节省大量的RAM和磁盘空间。但是,除此之外,很少有其他好东西要提及。在给定的链接上进行比较确实很不错。


0

auto_increment很有用,直到您意识到它们为具有极高插入并发性的表吸吮,这时它们成为瓶颈,并且您被迫使用MyISAM表实现序列。

无论如何,要回答您的问题,MySQL要做的最大事情就是轻松地设置复制,以允许复制链接和读取从属。但是,Postgres将在下一个版本9.0(已处于alpha状态)中提供该功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.