MySQL与SQL Server与Oracle

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

在今天的一次公司会议上提出了一个问题,我不好意思,我不知道:对开发人员来说,MS或Oracle提供的MySQL缺乏什么样的翻天覆地的function,并允许MS和Oracle为他们的系统收费?

我认为其他的评论者是高度评价与商业解决scheme捆绑在一起的所有额外的非核心关系型数据库pipe理系统的能力。

这里是一个Oracle版本和function的matrix,值得浏览的只是对“额外”function的理解,特别是在开发和支持您自己的版本(如果甚至是可能的话)在像MySQL这样的产品上: http : //www.oracle.com/us/products/database/product-editions-066501.html

例如,如果您有一个要求:“用户应该能够恢复任何以前版本的数据,他们已经删除/更新了一个星期后提交更改”,那意味着我认为一定的开发开销在没有像Oracle的闪回查询这样的内置function的系统上会更高。

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

其他的区别是句法和轻微的语义差异,使事情变得更容易或更困难(如500强与限制/抵消)。

但真正的杀手锏是,在MySQL(RDBMS层)的MSSQL(报告服务,分析服务)和Oracle(数据仓库,RAC)之上有大量的集成工具和服务。

MySQL不是免费的!

人们普遍认为这是免费的,但是你正在销售或者发布包含MySQL的软件包,它有很严格的限制。 在这些情况下,只有开源项目或非营利组织才是免费的。 如果您可以设法将数据库和驱动程序从应用程序的其他部分完全分离出来,并强制客户自行下载并安装MySQL,则可能是好的。

否则,“标准”版本的费用为$ 2,000 /年,与SQL Server的许可费用大致相当。

两者都是非常好的数据库,但在SQL Server中的优势是:

  • 丰富的expression性程序语言(T-SQL)
  • 一个更好的查询优化器,在写密集型环境中性能更好
  • 一套强大的辅助工具和function,包括编程环境,ETL工具(SSIS),维度build模(SSAS),报告环境(SSRS)以及合理复杂的作业调度程序。
  • 交互式debugging存储过程和UDF。
  • 一个相对容易使用的基于窗口的pipe理工具,可让您以“点击”方式执行大多数pipe理任务。

许多人在思想上反对使用微软的工具,或被locking在Windows环境中,我可以理解这一点。 但是,MySQL不是用于商业用途,这似乎并没有被广泛的理解。

要查看MySQL的许可政策,请查看他们的网站: http : //www.mysql.com/about/legal/licensing/index.html

一些其他的东西,甲骨文已超过MySQL。

  • 队列
  • 内部工作安排
  • 成熟的存储过程语言
  • 分配表格
  • 细粒度的访问控制和审计
  • 强大的恢复function(例如闪回,rman,dataguard)
  • 远程数据库链接
  • 应用expression

在我pipe理其他供应商的RDBS之前,甲骨文一再重复“读者不阻止作者,作者不阻止读者”对我来说意义不大,对Oracle数据库pipe理员来说,8年来我并不太了解locking问题。多年的Informix和3或SQL Server,并相信我,我知道更多关于locking。

所以我想说,除了关于支持和非RDBMSfunction的评论之外,还要添加locking行为。

有太多的function列出。 请参阅nullptr消息中的Wikipedia参考。 但是我想在会议上提出的一个问题是:“对于开发者来说,MS或者甲骨文公司提供了什么样的翻天覆地的function,以至于MySQL能够让MS和甲骨文为他们的系统收费, 而且这些function可以被我们公司有效利用呢?

所有优点是真正的优势,如果符合您的需求…

Oracle 表群集和单表散列群集 (在SQL Server中也找不到)。

注:我不能说任何有关Oracle,所以我只会回答SQL Server。

那么,当然,在数据库引擎的细微差异,如MERGE语句,BULK INSERT,GROUPING SETS等。

但是我认为更重要的是Integration Services,Analysis Services和Reporting Services等。 这些都是我认为绝对值得花钱的重要技术。

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

受ThinkJet回答的启发,我认为另外一个影响因素是:“我们愿意放弃数据库的独立性,以便提供更快,更便宜的更高性能应用程序的开发”。 如果公司的重点是所有的代码必须在数据库之间可移植,那么除了最简单的RDBMS以外,没有什么意义,Oracle和Microsoft提供的改进和优势毫无意义。

打破真正的数据库独立性是非常less的,我的理念是你应该全心全意地利用你已经付出的所有function – SQL增强,PL / SQL等等。

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

我认为这个问题有一个隐含的假设,那就是允许SQL Server / Oracle收费的开发特性。 我怀疑这是更多的执行/支持。

热备份是值得付出的主要function,至less在大多数安装中是这样。

对于Oracle来说,一个很大的附加价值是RAC – 多个服务器碰到相同的数据(即相同的磁盘),而不涉及任何混乱的复制。 它(通常)对于开发者来说是不明显的。

我非常喜欢的一些Oraclefunction

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

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