MySQL VS SQL Server VS Oracle

我一直只使用 MySQL,没有其他的数据库系统。

今天在一次公司会议上提出了一个问题,我感到很尴尬,因为我不知道: 对于开发人员来说,微软或甲骨文提供了哪些 MySQL 所缺乏的惊天动地的功能,以及哪些功能允许微软和甲骨文对他们的系统收费?

92107 次浏览

注意: 我不能透露任何关于 Oracle 的信息,所以我只回答 SQLServer 的问题。

当然,数据库引擎之间存在一些细微的差异,比如 MERGE 语句、 BULKINSERT、 GROUPING SETs 等。

但我认为更大的部分是像 IntegrationServices、 AnalysisServices 和 ReportingServices 这样的服务。这些都是重要的技术,在我看来绝对物有所值。

Oracle 和 MSSQL 的纯 RDBMS 层主要提供比 MySQL 和 InnoDB 更成熟的可编程环境。MySQL 存储过程和触发器还不能匹配 T-SQL 和 PL/SQL。

其他的差异是语法和轻微的语义差异,使事情更容易或更困难(如前500名与限制/偏移)。

但是真正的杀手是在 MSSQL (ReportingServices,AnalysisServices)和 Oracle (Data Warehouse,RAC)的 RDBMS 层之上有大量的集成工具和服务,而 MySQL 目前还没有这些工具和服务。

我非常喜欢 Oracle 的一些特性

  • 真正的应用程序集群,一种非常强大的数据库集群生成方法
  • 快速刷新的物化视图,一个非常有效的方法来存储和更新查询结果
  • 分析函数(又名窗口函数)允许对查询子集上的函数进行有效的分组。在大多数情况下,这可以避免自连接。

据我所知,这些在 MySQL 中都不可用。还有许多更有用的特性,特别是在企业版及其选项中。

我认为其他评论员强调所有与商业解决方案捆绑在一起的额外的非核心 RDBMS 能力是非常正确的。

这里有一个 Oracle 版本和特性的矩阵,值得浏览,只是为了理解“额外”的特性,特别是在像 MySQL: https://docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm#DBLIC116这样的产品上开发和支持自己的版本(如果可能的话)需要多少成本的情况下

例如,如果你有一个需求,说: “用户应该能够恢复任何以前的版本的数据,他们已经删除/更新后,直到一个星期的变化已经提交”,那么这意味着一定的开发开销,我认为会高得多的系统,没有一个内置的功能,如甲骨文的闪回查询。

还有一些神谕已经过去了 Mysql.

  • 排队
  • 内部作业调度内部作业调度
  • 成熟的存储过程语言
  • 有隔离的桌子
  • 细粒度访问控制和审计
  • 强恢复功能(如闪回,rman,dataguard)
  • 远程数据库连接
  • 特快申请表

要列出的功能太多了。 请参见 Nullptr 消息中的 Wikipedia 参考。 但是我认为会议上提出的真正问题是“对于开发人员来说,微软或甲骨文提供了什么惊天动地的功能,使得 MySQL 滞后,使得微软和甲骨文可以对他们的系统 并且可以被我们公司有效地利用收费?”

所有的优势都是真正的优势,如果与您的需要相匹配..。

MySQL 没有提供 Oracle 和 MSSQL 所提供的更丰富的编程环境,特别是在早期的版本中,当时它甚至没有存储过程。 从我的角度来看,我倾向于通过 DAO 或 ORM 映射器等将大部分业务逻辑放入应用程序中。因此底层的数据库引擎不那么重要,理论上应用程序是可移植的。 从管理的角度来看,MSSQL 提供了许多好处(许多已经列出) ,使得拥有数据库的任务变得更加容易。 Microsoft 还为开发提供了出色的轻量级 SQLExpress,我发现使用它很容易,并且它很好地集成到 Visual Studio 中。

Oracle桌群单表散列集群(在 SQLServer 中也找不到)。

受 ThinkJet 回答的启发,我认为另一个起作用的因素是,“我们愿意在多大程度上放弃数据库独立性,以提供更快、更便宜的开发性能更好的应用程序?”如果公司的重点是所有代码都必须在数据库之间可移植,那么除了使用最简单的 RDBMS 之外,使用其他任何东西都没有什么意义,而且 Oracle 和微软提供的改进和优势毫无价值。

打破真正的数据库独立性几乎不需要什么,我的哲学是,您应该全身心地投入到利用您已经付费的每个特性—— SQL 增强、 PL/SQL 等等。.

当然,其他人可能会有不同看法。

我认为这个问题有一个隐含的假设,即允许 SQLServer/Oracle 收费的是开发特性。我怀疑更多的是实现/支持。

热备份是一个值得花钱购买的主要特性,至少对于大多数安装来说是这样。

对于 Oracle 来说,一个很大的附加值是 RAC-多个服务器访问相同的数据(即相同的磁盘)而不需要任何复制。它(通常)对开发人员来说是不明显的。

直到我从其他供应商那里管理 RDBSes 之前,Oracle 经常重复“读者不会阻止作者,作者不会阻止读者对我来说毫无意义”。作为一名 Oracle DBA,我在8年的时间里真的不太了解如何处理锁定问题。2年的 Informix 和3或 SQLServer 经验,相信我,我对锁定有更多的了解。

因此,我想说,除了关于支持和非 RDBMS 特性的注释之外,还要添加锁定行为。

MySQL 不是免费的!

人们普遍认为它是免费的,但是如果你销售或者发布包含 MySQL 的软件包,它就带有相当严格的限制。如果 MySQL 必须包含在你的软件发布中(例如,你没有使用它 只有来服务远程客户端) ,它只对开源项目或非盈利组织免费。如果您可以设法将数据库和驱动程序与应用程序的其余部分完全分离,并强制您的客户自己下载并安装 MySQL,那么您可能没有问题。

否则,“标准”版每年的成本为2,000美元,这大致相当于授权 SQL Server 的成本。

两者都是非常好的数据库,但 SQLServer 的优点包括:

  • 一个丰富而有表现力的工作语言(t-SQL)
  • 更好的查询优化器,以及在写密集型环境中更好的性能
  • 一组强大的辅助工具和功能,包括编程环境、 ETL 工具(SSIS)、维度建模(SSAS)、报告环境(SSRS)和相当复杂的作业调度程序。
  • 存储过程和 UDF 的交互式调试。
  • 一个相对容易使用的基于窗口的管理工具,可以让您以“点击”的方式完成大多数管理任务。

许多人在意识形态上反对使用微软工具,或者被锁定在 Windows 环境中,我能理解这一点。但是 MySQL 并不是免费的商业应用程序,这一点似乎并没有得到广泛的理解。

要回顾 MySQL 的许可政策,可以看看他们的网站: https://www.mysql.com/about/legal/licensing/oem/