数据库之间有哪些主要区别?

时间:2009-01-26 23:59:28

标签: database comparison

我对任何数据库都没有狂热,但我希望看到供应商之间的差异。

例如,我主要使用Oracle,我发现其他人(MySQL,SQL Server,PostgreSQL,...)不能这样做:

对于SQL Server也是如此,其他人无法做到:

11 个答案:

答案 0 :(得分:23)

Oracle的CONNECT BY是标准SQL的递归SQL的限制版本。 DB2和MSSQL递归的“公用表表达式”有点难以编码,但提供的功能比Oracle的CONNECT BY更强大。 (不过,下一版本的Oracle数据库应该会得到真正的递归SQL。)

Flash back是一个真正独特的Oracle功能,它反映了Oracle MVCC的深度。与传统的悲观锁定相反,MVCC是Oracle处理并发的方式;并发处理是数据库之间存在很大差异的地方之一(尽管大多数DBMS仅仅基于悲观锁定而远离并发)。在我看来,Oracle坚定地建立MVCC的事实是一个重要的优势。

关于TOP结果:所有DBMS都有办法做到这一点。

除此之外:

SQL-wise:Oracle拥有最先进且符合标准的日期时间处理。 Oracle在与OLAP相关的函数方面很强大(但DB2和MSSQL也是如此; OLAP函数是开源DBMS在跟上时遇到一些麻烦的一个领域)。最近,Oracle似乎基本上忽略了SQL标准,因为它的标准合规性是停滞不前的(例如,与MSSQL相比,这里已经有了很大的改进);由于甲骨文的巨大市场份额,我把这归咎于傲慢。

概念上:Oracle和MySQL是处理数据库的两种截然不同的方式的示例。在Oracle中,创建数据库需要永远,并且数据库是一个非常重的对象,因此在Oracle世界中,数据库往往包含许多表,可能在不同的“模式”中。在MySQL中,数据库是一个非常轻量级的对象,所以MySQLers往往拥有许多数据库,每个数据库中的表相对较少(这可能就是为什么他们似乎不会抱怨MySQL缺少模式)。

Oracle(如DB2)是DBMS的一个示例,它几乎包含整个操作系统:它执行许多功能,像MSMS / MySQL / PostgreSQL这样的DBMS可以让操作系统的文件系统和虚拟内存系统处理。就个人而言,我更喜欢后一种方法,但无论使用哪种操作系统,Oracle的方式都使Oracle的性能大致相同。

与MSSQL相比,Oracle在更多平台上运行(与大多数其他DBMS一样; MSSQL可能是在Windows上运行的唯一重要的DBMS)。

Oracle提供了一种比大多数其他DBMS更多的集群方式:RAC。我听过很多关于RAC的恐怖故事,但是如果你能让它发挥作用,可以公平地说你有一个非常强大(且昂贵)的集群解决方案。

关于管理,我发现与大多数其他DBMS相比,Oracle管理起来要复杂得多。

然后,当然存在严重的价格差异:甲骨文的定价非常高,而且还在上升。

答案 1 :(得分:3)

SQL Server具有内置的自动递增功能,当您需要表的简单递增整数时,可以将其添加到列中。

在Oracle中,您需要创建一个序列并应用适当的触发器使其自行递增。

答案 2 :(得分:3)

答案 3 :(得分:3)

以下是其他数据库产品中不存在Sybase SQL Anywhere(AFAIK)的一些功能:

  • 表级加密
  • 列压缩(作为Oracle Enterprise Edition的选项提供,内置于所有版本的SA)
  • 存储过程可以用SQL,java,perl,php,C / C ++,C#或VB.NET编写

完全披露:我为Sybase工作 - 我是SQL Anywhere服务器团队的开发人员。这并不意味着广告或代表嫖娼。如果需要,我会将此答案标记为社区维基。

答案 4 :(得分:2)

除了SQLite之外,MySQL和几乎所有其他数据库之间的主要区别在于MySQL只知道一种连接 - 嵌套循环。

对于那种OLTP来说,这是可以接受的,但表面上是为MySQL设计的(相同的设计原则导致一段时间内没有实现触发器,视图和子查询等功能),但它对于主要的OLAP工作来说是致命的。不要相信我的话,请阅读Peter Zaitsev:http://peter-zaitsev.livejournal.com/758.html。它在子查询上的速度也非常慢,它最近学会了这样做。我想小步骤......

Oracle非常先进,具有很多功能,其中很多都需要额外的费用。这是建立和支持的熊;但如果你能负担得起DBA和维护,那么它的表现非常好。我提到成本和维护了吗?只是想我会重复一遍。但是,除了尊重Oracle工程师之外,他们已经建立了一些非常棒的东西。

Oracle失败的地方(和大多数其他地方一样)是数TB的工作负载。为此,你想去Teradata(一流的,极其昂贵的),Greenplum,AsterData,Netezza等专家。

除了事实上它只在Windows上运行之外,我没有听到任何关于SQL Server的好消息。

MySQL易于设置,对于OLTP来说很快,并且通常采取做一些事情的方法,并且做得很好。

PostgreSQL恰恰相反 - 它是数据库研究人员最喜欢的游乐场,这意味着它有十几种不同的连接策略,存储引擎,高级可选包和各种东西。当MySQL处理好的事情时,它比MySQL慢,并且在做事情时将它吹出水面MySQL不知道该怎么做(参见上文,使用散列连接)。

DB2应该是好的;没有个人经验。 Almaden的所有人都更好。与Sybase相同。

答案 5 :(得分:2)

答案 6 :(得分:1)

MySQL:REPLACE。这是一个“DELETE,然后INSERT”,它将替换现有的行。

答案 7 :(得分:1)

SQL Server和MySQL都不支持字符串连接的标准“双管道”,而其他所有DB似乎都支持。 (更新:显然MySQL确实......见下文)

但是这可以修复......在MySQL代码中,并通过http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=259291修复SQL Server。

答案 8 :(得分:1)

我是Sybase SQL Anywhere服务器团队的开发人员。我可以在这里发布有关SQL Anywhere(SA)功能的各种信息,如果你愿意的话,尽管我不想被遗忘用于发布广告。如果您想了解更多信息,请随时直接与我联系。

以下是对现有答案的回复:

  • SA也支持自动增量
  • SA支持||进行字符串连接
  • SA支持insert ... on existing update执行可以插入新行并更新现有行的单个语句

答案 9 :(得分:0)

除了在我看来,Sybase ASE是RDBMS的红头发儿童之外,我没有太多贡献。它缺少许多您认为理所当然的SQL Server或Oracle(甚至是其他类型的Sybase)的功能,如果没有第三方工具,您无法链接服务器和执行分布式查询,Sybase管理工具和IDE是有限的,并且非常有用可怜(再次,我的意见),与你合作是痛苦的。我想Sybase的市场份额只占3%。

旁注:如果像我一样,你必须使用多个RDBMS'并且需要一个好的工具,请查看AquaFold的Aqua Data Studio。我刚开始使用它,它真的很棒。它还有一些很棒的工具,比如ER建模和内置的比较工具。

答案 10 :(得分:0)

我不知道其他数据库服务器,但使用PostgreSQL,你可以

INSERT INTO mytable
   ( field_1, field_2,... ) 
VALUES
   ( value_1, value_2 )
RETURNING anyfield

anyfiel d当然必须是 mytable 的字段。

anyfield 是自动增量时非常有趣。

see PostgreSQL - INSERT