简单的问题 - 在2012年需要与ACID兼容的中型/大型数据库会更好。
我已经阅读了关于mySQL vs pgSQL的所有内容(大多数内容),但大多数内容分别与版本4,5.1和7,8有关并且过时(2008,2009)。它几乎是2012年,所以我想我们可以尝试重新审视这个问题。
基本上我想知道PostgreSQL中是否有任何东西超出了MySQL的易用性,可用性和更大的开发人员/知识库。
MySQL的查询优化器仍然是愚蠢的吗?在非常复杂的查询上它仍然超级慢吗?
打我! :)
PS。并且不要将我发送到谷歌或维基。我正在寻找一些不是概述的具体要点+我相信StackOverflow比一些随机页面更能让'聪明的家伙'发光。
附录
项目规模:假设一个订购系统,每个帐户大约10-100个订单/天,几千个帐户,最终,每个可以有几百到几千个用户。
擅长:在需求不断增长和变化时具有前瞻性和灵活性。在硬件部门保持低成本方面,性能也很重要。此外,熟练劳动力的可用性也是一个因素。
OLTP或OLAP:OLTP
MySQL的查询优化器仍然是愚蠢的吗?在非常复杂的查询上它仍然超级慢吗?
所有查询优化器有时都很愚蠢。在大多数情况下,PostgreSQL不那么愚蠢。 PostgreSQL的一些最新SQL功能(窗口函数,递归WITH查询等)非常强大,但如果你有一个愚蠢的ORM,它们可能无法使用。
项目规模:假设一个订购系统,每个帐户大约10-100个订单/天,几千个帐户,最终,每个可以有几百到几千个用户。
听起来不那么大 - 在一个大箱子的范围内。
擅长:在需求不断增长和变化时具有前瞻性和灵活性。
PostgreSQL拥有一支强大的开发团队,拥有一个扩展的贡献者社区。 Release policy是严格的,只有点发布中的错误修正。始终跟踪错误修正的9.1.x的最新版本。
MySQL过去对版本号的态度稍微宽松一些。这可能会随着Oracle的掌控而改变。我不熟悉各种叉子的政策。
在硬件部门保持低成本方面,性能也很重要。
如果硬件成为这个规模的项目中的主要组件,我会感到惊讶。
此外,熟练劳动力的可用性也是一个因素。
那是你的关键决策者。如果你有一群经验丰富的Perl + PostgreSQL黑客闲置,请使用它。如果您的人员知道Lisp和MySQL,那么就使用它。
OLTP或OLAP:OLTP
PostgreSQL在OLTP上一直很强大。
我个人的观点是,PostgreSQL邮件列表中充满了礼貌,乐于助人,知识渊博的人。您可以与Terabyte数据库和黑客建立直接联系,这些数据库和黑客已经构建了代码的主要部分。支持的质量非常好。
在SQL功能方面,PostgreSQL更先进。
MySQL仍然没有的东西(和PostgreSQL有):
select * from my_function()
) create view x as select * from (select * from y);
update foo set x = y, y = x
或
update foo set a = b, a = a + 100
boolean
数据类型
(将任何可以转换为非零数字的表达式视为“true”不是一个合适的布尔类型)对于Spatial / GIS功能,Postgres与PostGIS的功能也更强大。 Here是一个很好的比较。
不知道你所谓的“易用性”,但有几个modern SQL features,我不想错过(CTE,窗口函数),为我定义“易用性”。
现在,PostgreSQL不是完美的,可能是最讨厌的事情,可以调整可怕的VACUUM进程来处理繁重的写入数据库。
作为@a_horse_with_no_name answer的补充,我想在PostgreSQL中列出一些我非常喜欢的功能:
key->value
数据,可以在该类型的列上创建索引;distinct on
语法 - 我认为这个应该是ANSI SQL特性,对我来说看起来很自然(与MySQL语法相反);PostgreSQL是一个比较成熟的数据库,它具有更长的历史,它更符合ANSI SQL,它的查询优化器明显更好。 MySQL有不同的存储引擎,如MyISAM,InnoDB,内存,所有这些都是不兼容的,因为在一个引擎上运行的SQL查询在另一个引擎上执行时可能会产生语法错误。 PostgreSQL中的存储过程更好。