MySQL与其他数据库的缺点

时间:2009-08-30 17:51:30

标签: mysql database oracle

每一本教授编程的书(或几乎所有其他内容)都以一大堆关于它为什么(C ++,MySQL,滑水,跳伞,牙科,等等)的书开始,这是世界上最伟大的事情。所以我打开MySQL O'Reilly的书,阅读介绍,并获得传统的布道。 本书提到 的要点是:

  • MySQL已被证明已将Oracle捆绑为最快且最具扩展性的数据库软件。
  • 这是免费和开源的。

听起来很有说服力,但我知道每个故事总是至少有两面。当我看到有人建议有人使用Oracle而不是MySQL时,我知道我需要失望,并且想:“为什么在世界上你想要这样做?!”,仅仅是因为我读过的几段,没有其他理由。所以让我们调查故事的另一面:

不使用MySQL有什么理由?

18 个答案:

答案 0 :(得分:28)

这里只是一个突然出现在我脑海中的东西的随机列表。它是CW,所以请随时添加它。

  1. Oracle提供了基于数据库构建的顶级ERP。如果您的公司遵守“萨班斯 - 奥克斯利法案”(Sarbanes-Oxley)的规定,这相当于“至关重要”。
  2. SQL Server许可证随Analysis Services,Integration Services和Reporting Services一起提供。如果您想对OLAP,ETL或报告执行任何操作,这三个是构建在SQL Server堆栈上的出色应用程序。
  3. SQL Server具有本机.NET数据类型(2008年)。对于处理地理空间数据集的.NET商店来说,这绝对是非常棒的。
  4. MySQL不支持检查约束。
  5. SQL Server包含over子句,这有助于处理“每组中的前n行”问题。从本质上讲,您可以按照自己喜欢的方式对数据集进行分区聚合。
  6. SQL Server本身使用Kerberos和Windows身份验证。 MySQL不与Active Directory绑定。
  7. 子查询的卓越性能(几乎所有数据库都具有优于MySQL的子查询性能)
  8. Oracle,SQL Server,PostgreSQL和其他人可以使用更丰富的连接算法;这意味着连接通常可以更快地执行,尤其是涉及大型表时。

答案 1 :(得分:24)

  

MySQL已被证明已将oracle捆绑为最快且最具扩展性的数据库软件。

对任何两个数据库系统做出这样的声明可能足以让你把这本书扔掉,而不会阅读其余部分。数据库系统不是可以与几行信息进行比较的商品,并且在可预见的未来不会。

该声明显然是错误的一个原因是MySQL的计划选择非常有限。例如,MySQL不能使用合并连接或散列连接 - 两种具有有用性能特征的基本算法。对于许多查询工作负载而言,这几乎就是故事的结尾。使用合并连接显示合理的查询速度要快得多,这是微不足道的。

对MySQL和XYZ有很多其他批评,反之亦然。我的观点是,这是一个复杂的问题,而且这本书大大过于简单化了。如果您正在参与数据库,则需要花时间分散您的知识并理解基础知识。

我个人认为MySQL和SQLite是最糟糕的起点。选择像Oracle这样的东西(可以免费下载用于学习/评估,许多人没有意识到),PostgreSQL(BSD许可证)或MS SQL。 FirebirdSQL也可能不错。一旦您熟悉了一些系统,您就能够做出明智的选择,了解MySQL所做的权衡是否适合您。

答案 2 :(得分:5)

每个人似乎都缺少坚持使用Oracle / MS的主要原因之一。你已经拥有了一整套了解内部和外部产品的DBA。

答案 3 :(得分:3)

  • mysql中的默认排序规则不区分大小写。这本身并不是问题,但我认为这个奇怪的默认值表明它是针对业余爱好者而非专业人士。这是一个很大的假设,但我认为任何专业人士都希望数据库默认比较字符串的身份(即使用二进制排序规则)。
  • 在事务期间对表进行操作会导致隐式COMMIT。虽然第一眼看上去可能不会让人感到悲伤但是如果更改/创建表,您将注意到在ACID条件下无法工作是您申请的固有部分。

答案 4 :(得分:3)

MySQL在速度上肯定可以匹配或击败Oracle。我自己做了很多次。好吧,所以我不得不在正确的鞋带中使用各种表格类型,如黑洞,合并,innodb和myisam。我花了几天时间让一切正常运转。 Oracle DBA在一两个小时内完成了工作。

对于98%的网站来说,MySQL是可以的,也许更多。但是,如果你不知道自己在做什么,那么在没有大量数据的情况下将它带到爬行是相当容易的。甲骨文很难抓到,但它仍然可以完成。我已经使用了数亿个数据集来处理数以亿计的记录(通过一些措施很小)。 MySQL需要更多关注。

没有数据库可以无限扩展,这就是nosql“数据库”变得如此受欢迎的原因。我认为真正的问题是MySQL是否足够“满足”你需要做的事情。价格肯定是对的。 PHP也是如此。

为什么Facebook使用MySQL?你能想象他们购买足够的Oracle许可证会花费多少钱?这很好。

答案 5 :(得分:3)

  

它是免费和开源的。

真。但请记住,在许多情况下,MySQL不能免费用于商业用途。 MySQL和连接器(各种语言的官方驱动程序)是GPL许可的。

如果您使用Connector / .NET连接到MySQL,则您的代码必须与GPL兼容。虽然它是双重许可的,所以你可以在另一个许可下购买企业版 - 我相信他们有一个(免费或非常便宜的)程序,允许你在不同的许可下许可连接器。

我认识使用MySQL的每个人都没有意识到这一点: - )

答案 6 :(得分:3)

未来是sun(mysql背后的公司)不清楚,你不知道是否会有公司支持该产品。

答案 7 :(得分:2)

MySQL往往是一个非常通用的数据库系统,您可以将它用于几乎所有使用Oracle,SQL Server,PostgreSQL,DB2等的系统。

然而,这些不同的系统具有不同的优势,PostgreSQL具有比MySQL更多的功能,并且可以处理MySQL挣扎的一些非常具体的任务。 SQL Server通常很容易与Microsoft产品集成,而MySQL则需要做一些额外的工作才能使它们一起运行。 Oracle是大规模的,它们不仅仅是数据库,当你处理大型,庞大的系统时,Oracle可能拥有覆盖1个屋顶下所有内容的设备,而你需要将一堆不同的系统连接在一起才能拥有MySQL有您的数据库系统。

是否使用MySQL应该基于是否合理来使用MySQL。

答案 8 :(得分:2)

免责声明:自2001年以来我一直在使用MySQL并且仍然喜欢它,但是有几个原因让我怀疑我的忠诚......

在我读到的一些答案中,有一些错误的论点(几年前就是这样)。在做出选择之前,请检查MySQL文档及其最新功能列表。你可能会感到惊讶。

每个数据库服务器都缺少功能。如果您没有特别需要它,这不是真正的阻塞问题。

对我而言,主要问题在其他地方:

  1. 修复错误并在稳定版本中发布所需的时间。这是一种耻辱。 (对于一些错误......需要几年时间(不开玩笑)!)
  2. 稳定释放的频率。
  3. 但是从今年开始,新问题是:

    1. 增加分支的数量(Percona,Google,Facebook等)。
    2. Sun对他的策略不清楚。
    3. 许多MySQL员工离开了公司。

答案 9 :(得分:2)

MySQL非常容忍歧义 - 这是你在数据库系统中不想要的东西。以下是一些例子:

  • 正如另一张海报所述,CHARVARCHAR列不区分大小写,已经是一个非常糟糕的迹象。
  • 您可以INSERT进入一个没有默认值的列的表格NOT NULL。对真的! MySQL将根据数据类型为您选择一个值,而不是抛出错误,例如:数字0
  • 您可以使用GROUP BY语句,而某些列既不使用聚合函数,也不包含在GROUP BY语句中。结果几乎是随机的。根据我的经验,这里也没有警告或错误。

MySQL也远非坚如磐石。就在这个月,我发现DreamHost使用的MySQL版本(不可否认是旧的,但是“稳定版本”)导致数据丢失。 (创建具有可变长度行的表时的某些条件。)

我已经使用MySQL多年了,但仍然会这样做,但绝不会梦想将它用于任何严重的问题,数据丢失将成为一个大问题。这对于非任务关键型网站和博客来说非常棒。

答案 10 :(得分:2)

  

我知道我需要失望   当我看到有人向某人推荐时   使用oracle代替MySQL和   想,“你为什么要在这个世界上   想要那样做?!“

因为您的公司在过去十年中一直在使用Oracle,或者因为您将企业使用与'必须是好的'和开源与'免费垃圾'等同起来。这只是唯一的原因。我认识的每个与Oracle合作过的人都厌恶它。我认识的每个人都使用MySQL,假设他们不喜欢它,至少在几乎所有方面都认为它是Oracle的一个更好的替代品。

SQL RMDB虽然如此复杂,但几乎在每个方面都有一个数据库执行的操作,另一个数据库没有。不幸的是,这也是比较人们引用统计数据而不使用正确配置的服务器的数据库的事实。如果你有两个服务器的默认配置,一个可能比另一个更好,但这与比较通常一样。它们并没有反映出这样一个事实,即这些巨大的应用程序有一百万个小开关和切换,你可以用来加速某些事情,提高可靠性,并且通常会搞坏科学。

答案 11 :(得分:1)

基本上,数据库有多种选择。坦率地说,在当今世界,数据库选择并不像几年前那么重要。以下是一些需要考虑的问题。

  1. 广泛使用的大多数当前数据库系统,例如SQL Server(和SQL Server Express),Oracle,MySQL,SQLLite等,都是相对标准兼容的,可以在某种程度上互换使用。有些服务于不同的利基市场。例如,SQL Server,MySQL和Oracle都是大型企业应用程序的不错选择。 SQLLite非常适合部署在客户端上的应用程序,并且需要占用空间小且配置最少的本地数据库。 (在我看来,甲骨文定价过高,得到了一个傲慢无反应的公司的支持。它绝不是我在任何项目上的首选。我只会在客户强制要求或必要时使用它。)

  2. 很高比例的高端开发人员正在使用Hibernate(Java)/ NHibernate(.NET)等工具来构建他们的数据访问层。 Hibernate变体强烈鼓励开发人员开始使用对象模型而不是数据库模型。然后,Hibernate应用程序自动生成数据模型 - 甚至处理数据模型更新。 Hibernate变体可以与任何主要数据库供应商一起使用。更改数据库选择可以像在配置中选择不同的数据库类型一样简单轻松。另外值得一提的是,虽然Hibernate和NHibernate是跨数据库兼容的,但它们并不适用于最低的公分母。这些应用程序中的数据访问代码通常旨在利用给定数据库引擎中的特殊功能。例如,NHibernate支持访问SQL Server中的NVarchar(Max)数据类型,允许使用非常长的字符串。

  3. 在大多数应用程序中,数据库性能问题并非直接来自读写速度。大多数问题与应用程序如何管理频繁访问的数据的缓存有关。例如,在在线博客站点中,一旦读取博客帖子就将其缓存是有意义的,这样就不会重复从数据库中提取博客文章。这种缓存机制几乎总是主要由应用程序代码而不是数据库服务器处理 - 尽管数据库服务器确实提供了一些缓存。 Hibernate / NHibernate内置了出色的缓存支持,Microsoft的ASP.NET和基于ASP.NET的新MVC框架也已内置。

  4. Enterpise数据库(SQL Server,Oracle,MySQL)最适合需要复制,群集,大型数据集等功能的情况。

答案 12 :(得分:1)

我不喜欢MySQL许可证:Firebird和PostgreSQL更好

MySQL中没有真正的hotbackup包含在

您还可以查看here这是有趣的链接和评论!

答案 13 :(得分:0)

MySQL是免费的,但需要专家维护。自然使用命令提示符并且不怕实验的人。在某些情况下,MySQL问题过于复杂,正确的解决问题的人可能无法获得任何金钱。

SQL Server定价在中间范围内。它可以由“普通人”维持,他们每天17:00回家,并且自然不喜欢50页的HOW-TO。 SQL Sever在大多数情况下表现良好,但在特定情况下可能会崩溃。

Oracle是最昂贵的,需要高薪运营商。如果你有钱,甲骨文是一个“安全”的选择,因为甲骨文不会为钱做任何事情。

三个产品,三个市场!

答案 14 :(得分:0)

列出陷阱的几页(例如thisthis)让我想尽可能远离MySQL。这是Postgres和MySQL的更中性comparison

至于其他人提到的开源方面:MySQL是开源的,免费的,只有你的应用程序也是如此。如果不是,则需要商业许可证。

答案 15 :(得分:-1)

我的个人故事:

将新索引添加到大约10k行的表中。

MySQL方面 大约30秒。

Postgres方 大约1秒钟。

答案 16 :(得分:-2)

我已经使用MySQL多年了,而SQL Server仅在过去一年中使用过。在大多数情况下,我并不认为一个比另一个更容易或更难使用。但是,我确实希望MSSQL具有MySQL拥有的一些功能(例如,能够在单个INSERT语句中插入多行)。

答案 17 :(得分:-4)

此外,如果您不必使用RDBMS,请结帐redis。它基本上是通过异步写入来实现的。性能与MySQL的性能不同。

嗯......我猜这个比较对MySQL来说不公平,因为它不是RDBMS ......