C# – MySQL vs Microsoft SQL Server

在最长的时间里,我一直在使用MySQL服务器来处理数据(在JAVA和C#中)。 但最近,我一直听到有关LINQ和SQL Server的好消息。 我一直在考虑转换,但我对SQL Server知之甚少。

任何以前使用过SQL Server的人都可以在性能和可用性方面定义它与MySQL服务器的对比情况。

我也听说SQL Server对C#更好,因为它基本上是内置的。

我已经在大型和小型C#项目上使用SQL Server多年,但去年在各种C#(但与开源相关和启动相关的)项目中使用了大部分MySQL,这些项目已经在使用MySQL。

我想念SQL Server! 根据我的经验,SQL Server在很多方面都更好:

  • SQL Server中的查询优化器更智能,这意味着您可以经常构建查询,并且它们将生成最佳查询计划。 使用MySQL,我发现自己花费更多时间手动调整甚至相对简单的查询,以便产生良好的查询计划。
  • SQL Server中的底层数据库引擎可以执行更多操作来提高性能。 例如,MySQL中的所有连接都是嵌套循环连接,而SQL Server可以执行散列连接或合并连接,这有时可以提高查询性能10x +。 SQL Server还可以并行化查询,对于大型数据仓库工作负载尤其可以显着提高性能。
  • GUI工具领先于数英里。 SQL Server的图形计划查询优化器使查询优化变得轻而易举 – 您永远不会想要回到EXPLAIN EXTENDED。 SQL Server 2008的图形监控工具比通过慢速查询日志更容易找出出错的地方。 等等。
  • 正如您所提到的,SQL Server中的.NET集成故事(C#,Linq,Entity Framework等)更好。 我也使用C#,entity framework和LINQ与MySQL,所以它不是一个或两件事,尽管在.NET环境中SQL Server的性能可能更好,因为团队协同工作以提高性能并使集成更好地工作。
  • SQL Server的SQL语言支持比MySQL更丰富,包括一些非常酷的function(特别是在SQL 2008中),如ROW_NUMBER()GROUPING_SETSOPTIMIZE FOR , 计算列等。
  • 备份速度要快很多倍,特别是在带有压缩备份的SQL 2008中
  • SQL Server的未来没有任何Oracle收购云。
  • SQL Server(特别是昂贵的版本)附带其他好东西,如OLAP数据仓库(SSAS),报告解决方案(SSRS),ETL工具(SSIS),调度程序(SQL代理)等。您可以获得类似的开放-source工具,免费(例如Pentaho , BIRT等),但SQL Server的集成往往更好。

也就是说,存在重大缺陷,可能会或可能不会成为您的交易破坏者:

  • 你被困在使用Windows服务器,这需要所有的优点和缺点
  • SQL Server,尤其是高端版本, 价格昂贵 ! 对于小型数据库(我认为<4GB),SQL Server Express是免费的,并且几乎与常规SQL Server一样功能齐全 - 如果你知道你的数据很小而且你知道你的老板是个小气球,快递是要走的路。 此外,还有一个新的SQL Server 2008网络版,对于面向互联网的网络应用程序,理论上应该提供便宜的托管,因为托管服务商的成本每个处理器只需15美元/月。
  • 它不是开源的。 一些公司和开发团队对此充满热情,原因很充分(调试,成本,理念等)!
  • 与上述相关:如果你想在MySQL中修复一个bug,并且你已经掌握了这些技能,你可以自己修复它。 使用SQL Server,在查询处理,优化等方面存在着痛苦的错误,这些错误持续多年 – 我花了很多时间来解决其中的一些问题。
  • 对于非常简单的只读(或非事务)工作负载(例如,来自Web应用程序的基于数据库的缓存访问),您可以使用MyISAM而不是InnoDB,我听说MySQL的速度要快得多。

警告:我听说MySQL 6.0应该解决上面的许多差距和差异,但我承认自己没有让自己快速了解Oracle事物等将如何影响日程安排和/或function集。

re:你的“C#是内置的”注意:是的,你可以使用.NET语言开发存储过程,函数,聚合等,但是在大多数情况下恕我直言这比它的价值更麻烦,包括因为部署更难和DBA对其服务器上的.NET代码不太满意。 真正赢得C#+ .NET + Visual Studio + SQL Server组合,恕我直言,它们是在过去10年中并行设计的,可以很好地协同工作,因此您将获得易用性和协同作用。可能无法使用MySQL。 也就是说,正如我上面提到的,这不是一个交易破坏者或交易制造者…它使用SQL Server与其他Microsoft堆栈更加平滑。

总而言之,让我明确一点,对于许多数据库工作负载而言,MySQL已经足够好了 – 它可以运行,它很稳定,速度快,它有相当好的工具等等。而且价格实惠! :-)我永远不会因为他们使用MySQL而拒绝一个项目。 但这种比较就像驾驶本田而不是宝马……本田可以让你到达你想去的地方,但如果你的钱包可以拿走它,那么你可以在Bimmer享受更多的乐趣。 🙂

我经常使用它们,目前正在学习我的Sql Server MCTS,所以我可以在这里提出一些有用的评论。

SQL Server是一个function更强大的数据库,尤其是2008版本。 MySQL甚至不支持列约束(例如,创建一个int列然后将值约束在1到1000之间 – 不能在MySQL中自动强制执行)。 SQL Server提供全文索引,本机XML列和操作,多种事务模式,复杂的安全产品,复制和分布式function以及出色的管理套件。

关于您的C#注释,是的,SQL Server能够导入CLR对象,这意味着您可以编译一些.Net代码并将其放入SQL Server并具有使用它的数据库function。 这对于创建新的聚合函数特别有用,因为您可以绕过游标并使用更快的CLR代码循环。

您还可以优化SQL Server到hilt,直到它使用的锁定和隔离模式,以及给定线程可以使用的CPU /内存。

另一方面,MySQL是免费且相对容易设置的,有足够的选项,大多数网站所有者都非常乐意将它用于基本的CRUD应用程序。

如果你想使用Linq2Sql,那么你需要SQL Server。 如果您需要大量高级function,那么SQL Server是您的最佳选择。

我曾与两者合作,但更多的是使用SqlServer。 在大型商店中,特别是在DB Architects中出现许多应用程序架构决策的商店中,SQL Server提供了更多。 复制,SSIS等。但是,这些增加了很多复杂性,而且根据我的经验,这些操作已经成为很大一部分操作中断的根源。

但作为软件应用程序的数据存储区,MySql可以满足您的需求,并且简单,可靠,快速和简单。

严格说来,你真的希望你的应用程序逻辑在你的应用程序代码中,而不是在复杂的SQL和约束定义中。 在数据存储区中查找基础知识,并将节省的时间放入程序本身。

LINQ本身就是一种语言,不依赖于特定的数据库,甚至不依赖于数据库。 实际上它只是一种操纵结构化数据集合的工具。 编写DBMS的基础语言在使用它的语言方面无关紧要。

C#将使用ADO.NET基本相同地访问MySQL和SQLServer(或LINQ – LINQ to SQL与SQL Server绑定,但它似乎没有很长的寿命),所以这不是一个因素我的想法,虽然可能是IDE集成。

SQL Server的好处包括SQL Server中更全面的开发支持,代理和调度,安全模型以及索引,调优和其他function,如Integration Services,Reporting Services和Analysis Services,这使得它相对容易管理大型系统基础设施。

我不认为你已经提供了足够的关于你的系统的信息,以便在它们之间做出明显的选择。

从开发(编码)的角度来看,我曾兼作Java开发人员和C#开发人员(在各种项目中都兼顾,因此Java到SQLServer,Java到MySQL,C#到MySQL,C#到SQLServer)。 我个人并没有真正注意到这一点,尽管我没有做太复杂的事情。 我不认为如果你认为会有一个陡峭的学习曲线,你不会担心,除非你想进入一些真正的细节服务器特定的东西。 有一些细微的差别,但没有人不会很快接受。

您是否考虑过像PostgreSQL这样function更全面的开源数据库。 SQL Server没有任何问题,但它确实开始将您挂钩到一个许可的软件中,如果您继续使用开源计数器部分,您可以远离它。 这一切都取决于你是否可以。