我知道这个问题听起来很挑衅,但事实并非如此。我最近发现 MySQL 在很多领域都受到限制,并且越来越喜欢 PostgreSQL。它的扩展性要好得多,并且比 MySQL 更尊重 SQL 标准。
不过,我对 PostgreSQL 世界还是很陌生,因为我愿意在我未来的所有项目中离开 MySQL,所以我想知道的是:MySQL 是否有任何特定的功能做得更好(如更多比 PostgreSQL 性能更高或更用户友好等)?
我想知道我会从 MySQL 中错过什么。我已经发现 MySQL 中的 AUTO_INCREMENT 字段比 PostgreSQL 中的 SEQUENCES 更方便,并且过去在 Windows 中的部署是有问题的(不再是问题。对我来说从来没有问题)。
还有什么?
PSQL 的 COUNT(*) 也慢得多。您应该为这种功能创建触发器。
您显然是从开发人员的角度来解决这个问题的,因此您可能会在 SO 上找到更有用的答案。
从管理的角度来看:
- 复制 (HA)
- 复制(扩展*)
- 复制(备份)
- 应用程序支持
- 社区的规模和深度(文档、支持)
- 现有安装基础/可用工作
*请注意,您提到
postgres
了更好的缩放。扩展对每个人来说都意味着不同的东西,但作为一般规则,具有将负载分散到多个服务器的路径的东西比没有的东西扩展得更好。因为 Postgres 有效地为每个更新执行写时复制(以便它可以处理事务),如果您不需要事务,并且相对于读取执行大量写入,MySQL 将不会有 PostgreS 的开销将要。(每条更新的记录都需要多写,更新索引等)
我能想到 PostgreSQL 缺少的一件事:
我认为阻塞,插入或更新也有一些东西。但我似乎不记得它实际上是什么。:S
'handy' 的 auto_increment 字段不是很相关,不是吗?Oracle有序列,无疑是世界上使用最广泛的商业数据库。
这是关于 PostgreSQL 是否更安全等方面的大量信息。我只是将您指向PostgreSQL wiki 上的此页面(毫无疑问,这是一个有色人种的意见,但无论如何这就是您要寻找的内容)。
很多人在这个页面上提到 MySQL 对新手更友好。所以?向我解释这在关键任务环境中的重要性。
MySQL 通常被称为SQL'ed grep。对我来说(在撰写本文时),它看起来很像 PHP —— 很尴尬,但很受欢迎。
尝试从一开始就重命名数据库。;) 然后添加(缺少)条件索引。
PS我可以指出 MySQL 至少有一个无可争议的好特性——它支持相当节省空间的数据类型,例如(无符号)字节。当相应地使用时,这可以节省大量的 RAM 和磁盘空间。但是,唉。并且对您提供的链接进行比较真的很漂亮。
auto_increment 很方便,直到您意识到它们对插入并发性极高的表很不利,此时它们成为瓶颈,您被迫使用 MyISAM 表实现序列。
无论如何,为了回答你的问题,MySQL 所做的最大的事情就是很容易设置允许复制链接和读取从属的复制。但是,Postgres 将在下一个版本 9.0(已经处于 alpha 状态)中拥有它。