sql - 选择正确的数据库 : MySQL vs. 其他一切

标签 sql mysql oracle postgresql database

现在似乎每个人都只使用 MySQL,因为这正是每个人都使用的。我正在开发一个将处理大量传入数据的 Web 应用程序,我想知道我是否应该“只使用 MySQL”,或者我是否应该看看其他开源数据库甚至商业数据库?

编辑:应该提到,我正在寻找最佳性能,与在 debian 5 上运行的 ruby​​ + rails 集成并且资金紧张,但如果从长远来看可以节省资金,我会考虑投资更昂贵的东西。

最佳答案

我以前发布过这个,但我没有理由改变这个建议:

MySQL 更容易上手。

更好的用户界面工具。更快,如果你不使用 ACID。对无效数据的容忍度更高。自动增量列就像键入自动增量一样简单。权限与文件系统和操作系统用户无关。在编写存储过程时,设置分隔符比使用 PG 的“美元符号引用”更容易。在 MySQL 中,您连接到所有数据库,而不是一次只连接一个。

Postgres (PG) 更符合标准,但更丑陋且更复杂,尤其是从 UI 角度来看。它过去需要手动清理,并且实际上强制执行引用完整性(这是一件很棒的事情,但可能会让人头疼)。自动增量更灵活,但需要序列(我可以通过使用序列来掩盖),等等,什么是 OID?

因此,如果您不太了解或不太关心数据库、数据有效性、ACID 合规性等,但您确实关心易用性和速度,那么您倾向于使用 MySQL。

太多(不是全部,而是很多)“网络程序员”对“网络 2.0”或 PHP 或 Java 了解很多,但对数据库理论或实践知之甚少(“索引?那是什么?”) .他们倾向于将数据库视为花哨的哈希表或数据包,事实上,它不像哈希表那样可动态更改或容错。

对于这些人来说,MySQL——因为在 5.0 之前它还不是真正的 RDBMS,而且在许多方面仍然不是——是天赐之物。它比竞争对手“更快”,并且不会“浪费时间”在网络程序员不想要、不理解或看不到值(value)的“深奥”数据库上。

另一方面,对于具有数据库背景的人来说,MySQL 是一个雷区:应该可以工作的东西(复杂的 View 、group bys、group bys 中的 order bys)可能会起作用,或者如果幸运的话可能会导致服务器崩溃,或者如果你不走运,只给出错误数据的结果。

我花了好几天的时间来解决其中一些问题,尽管 View 和分组并不特别复杂。

而且 MySQL 并不是真的更快。如果您将 InnoDb 表用于 ACID(或者仅仅因为超过 3000 万行,MyISAM 表往往会变得很糟糕),是的,直接单表选择可能比 PG 中更快。但是加入连接后,PG 突然变得更快了。 (MySQL 尤其不擅长外连接。)

总而言之:如果对您来说数据库是一个包,如果您从不打算进行数据挖掘或报告,如果您最感兴趣的是提供具有很少关系或更新的大块文本 - 也就是说,如果如果您正在使用数据库来支持博客,MySQL 是一个不错的选择。

但是如果你实际上是在管理数据,如果你明白数据比前端程序和中间层业务规则更长寿,对业务更有值(value),如果你需要真实数据库的功能,请使用 PG .

一个“网络程序员”已经决定他的所有表结构都可以由 Hibernate(或其他一些 ORM)自动生成,他会说,“太复杂了”,“我打赌复杂意味着更多的成本和更慢的速度”所以他选择了 MySQL。

正如我所说,PG 要好得多,我讨厌处理 MySQL 的奇怪错误,而且我认为对于任何稍微复杂的查询,PG 的整体性能都可能比 MySQL 更好。

但是 MySQL 让事情看起来(看似)简单,所以很多人并不真正了解数据库设计,认为 MySQL 是一个不错的选择。

使用 PG。它是一致的、可靠的、符合标准的,它在(甚至是中等程度的)复杂查询上速度更快,它不会因为奇怪的错误而完全打乱你的日程安排。

关于sql - 选择正确的数据库 : MySQL vs. 其他一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/831849/

相关文章:

mysql - 将三个独立的模型连接成一个结果

java - oracle中三串列的公共(public)子串合并

SQL Oracle 约束值在多个列中唯一

sql - 如何找到最近的日期?

sql - 使用 SQL 查找唯一行?

mysql - 返回仅包含不带空格的值的列

php - 准备好的语句不适用于 ALTER 表查询

c++ - 插入MYSQL数据库表后出现错误消息

java - 在 Oracle JDBC 日志记录中获取绑定(bind)变量

sql - 编写一个查询,给出用户 DDD 和 FFF 的共同好友名称。另外,请注意,如果 A 是 B 的 friend ,则 B 也是 A 的 friend