C# - MySQL 与 Microsoft SQL Server [关闭]
Posted
技术标签:
【中文标题】C# - MySQL 与 Microsoft SQL Server [关闭]【英文标题】:C# - MySQL vs Microsoft SQL Server [closed] 【发布时间】:2010-12-17 23:41:30 【问题描述】:很长一段时间以来,我一直在使用 mysql 服务器来处理数据(在 JAVA 和 C# 中)。但最近,我听到了有关 LINQ 和 SQL Server 的好消息。我一直在考虑转换,但我对 SQL Server 了解不多。
任何曾经使用过 SQL Server 的人,请定义一下它在性能和可用性方面与 MySQL 服务器相比有多好。
我还听说 SQL Server 更适合 C#,因为它基本上是内置的。
【问题讨论】:
这应该有助于对两者进行一般比较,而不考虑 C#:tinyurl.com/yll4aro 我认为这不值得一个完整的答案,但我会评论说,我认为人们很少使用 SQL Server 中的 CLR 进行核心数据访问。 ADO.NET、LINQ 和 Entity Framework 似乎是主要选择。 如果您对使用 LINQ 感兴趣,那么您并不需要对 SQL Server 了解太多。整个目的是 LINQ 抽象了数据访问,因此您不必直接编写 SQL 查询。 @AdamRobinson 具有讽刺意味的是,我把它写给了谷歌,然后我就到了这里。 【参考方案1】:LINQ 本身就是一种语言,它不依赖于特定的数据库,甚至不依赖于数据库。实际上,它只是一个用于操作结构化数据集合的工具。编写 DBMS 的底层语言与您使用的语言无关。
【讨论】:
LINQ to SQL 与 SQL Server 密切相关。 嗯,有点。 linq to mysql 没有官方的 MS 支持,但是有一个开源项目有一个 mysql 提供程序。 @Chris:如果你进入“黑客”领域(这个词听起来比我想要的更负面),那么所有的赌注都没有了。就真正的 LINQ-to-SQL(与实体框架相比)而言,它直接与 SQL Server 相关联。事实上,它甚至还有 SQLCE 的问题。 是的,LINQ to SQL 与 SQL Server 密切相关。但是您评论的答案没有说LINQ to SQL,而是说LINQ。答案是正确的,LINQ 不依赖于特定的数据库,甚至根本不依赖于数据库。 .NET 的 MySQL 提供程序支持 Entity Framework,因此可以将 LINQ 与 MySQL 一起使用,而无需任何黑客攻击。 @Joel:你是对的,但我的(不幸的)经验是大多数时候人们指的是 LINQ(尤其是那些不熟悉它的人)他们指的是 LINQ-to -SQL。【参考方案2】:C# 将使用 ADO.NET 访问 MySQL 和 SQLServer我认为这是一个因素,尽管 IDE 集成可能是。
SQL Server 的好处包括 SQL Server 内更完整的开发支持、代理和调度、安全模型以及索引、调整和其他功能,如集成服务、报告服务和分析服务,这使得它相对易于管理大型系统基础架构。
我认为您没有提供足够的关于您的系统的信息,因此目前无法在它们之间做出明显的选择。
【讨论】:
【参考方案3】:多年来,我在大大小小的 C# 项目中使用 SQL Server 很多年,但去年在已经使用 MySQL 的各种 C#(但与开源相关和启动相关)项目中主要使用 MySQL。
我想念 SQL Server!根据我的经验,SQL Server 在很多方面都更好:
SQL Server 中的查询优化器更加智能,这意味着您可以经常构建查询,它们会生成最佳查询计划。使用 MySQL,我发现自己会花费更多时间手动调整相对简单的查询,以便生成良好的查询计划。 SQL Server 中的底层数据库引擎可以做更多的事情来提高性能。例如,MySQL 中的所有联接都是嵌套循环联接,而 SQL Server 可以执行哈希联接或合并联接,这有时可以将查询性能提高 10 倍以上。 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 更丰富,包括一些非常酷的特性(尤其是在 SQL 2008 中),如ROW_NUMBER()
、GROUPING_SETS
、OPTIMIZE FOR
、computed columns 等。
备份速度要快很多倍,尤其是在带有压缩备份的 SQL 2008 中
SQL Server 的未来没有 Oracle 收购云。
SQL Server(尤其是昂贵的版本)附带其他好东西,如 OLAP 数据仓库 (SSAS)、报告解决方案 (s-s-rS)、ETL 工具 (SSIS)、调度程序(SQL 代理)等。您可以免费获得类似的开源工具(例如Pentaho、BIRT 等),但与 SQL Server 的集成往往更好。
也就是说,存在重大缺陷,可能会或可能不会影响您的交易:
您被困在使用 Windows 服务器上,这带来了所有的优点和缺点 SQL Server,尤其是高端版本,是expensive!对于小型数据库(我认为小于 4GB),SQL Server Express 是免费的,并且几乎与常规 SQL Server 一样全功能——如果你知道你的数据会很小并且你知道你的老板是个小气鬼, 快递是要走的路。此外,还有一个新的 SQL Server 2008 Web 版,对于面向 Internet 的 Web 应用程序,理论上应该提供便宜的托管,因为托管商的成本仅为每个处理器每月 15 美元。 它不是开源的。出于充分的理由(调试、成本、理念等),一些公司和开发团队对此非常感兴趣! 与上述相关:如果你想修复MySQL中的一个错误,并且你有技能,你可以自己修复它。使用 SQL Server,查询处理、优化等方面的错误会持续数年——我已经花费了大量时间来解决其中的一些问题。 对于非常简单的只读(或非事务性)工作负载(例如,来自 Web 应用程序的基于 DB 的缓存访问),您可以使用 MyISAM 而不是 InnoDB,我听说 MySQL 可以明显更快.警告:我听说 MySQL 6.0 应该解决上述许多差距和差异,但我承认我没有跟上 Oracle 事物等将如何影响计划和/或功能集的速度。
re:您的“C# 是内置的”注意:是的,您可以使用 .NET 语言开发存储过程、函数、聚合等,但恕我直言,在大多数情况下,这比它的价值更麻烦,包括因为部署更难,并且 DBA 对他们服务器上的 .NET 代码不太满意。恕我直言,C# + .NET + Visual Studio + SQL Server 组合的真正胜利在于,它们在过去 10 年中并行设计,可以很好地协同工作,因此您将获得易用性和协同作用可能无法使用 MySQL。也就是说,正如我上面提到的,这不是破坏交易或促成交易......它只是将 SQL Server 与 Microsoft 堆栈的其余部分一起使用更顺畅。
总之,让我明确一点,对于许多数据库工作负载,MySQL 已经足够好了——它可以工作、稳定、速度快、工具相当不错等等。而且价格实惠! :-) 我永远不会仅仅因为他们使用 MySQL 而拒绝一个项目。但是比较就像驾驶本田与宝马……本田可以带您去想去的地方,但是如果您的钱包可以承受,那么使用 Bimmer 会更加享受骑行的乐趣。 :-)
【讨论】:
请记住,Web 版仅适用于面向公众的 Web 应用程序或网站,而不是 Intranet。 我要补充一点,对于更简单的查询,mySQL 可以更快。另一个选项是 PostGreSQL,它介于两者之间。它可以扩展到企业大小,就像(有人说比)MS SQL 服务器更好。不像 SQL Server 那样花费数十亿美元(无论如何都非常依赖)。 是的。我最近也一直在使用 Postgres。 DBMS 很好,但我的主要抱怨是鸡和蛋:Postgres 的用户群较小,因此其他产品(例如 SubSonic)与 Postgres 的集成比其他 DBMS 晚。如果我想将 Entity Framework 与 Postgres 一起使用,我可能需要为 dotConnect 支付 100 美元。等等。但特别是考虑到 Oracle 的担忧,如果我今天选择开源数据库,从长远来看,Postgres 可能是一个更安全的选择。 +1,但缺点是所有 TSQL 特定的废话。成为便携性的噩梦。 @sixlettervariables - 同意,但我从 MySQL 到 Postgres 的移植经验也不是很好 - 不仅对于 SQL 语言变体,而且对于您需要如何构建查询以生成良好的计划和解决 DBMS ——具体问题。 DB-neutral ORM 方法开始看起来越来越有吸引力。 :-)【参考方案4】:我经常使用这两种方法,目前正在为我的 Sql Server MCTS 学习,所以我可能会在这里扔一些有用的 cmets。
SQL Server 是一个功能非常、非常、非常全面的数据库,尤其是 2008 版本。 MySQL 甚至不支持列约束(例如,创建一个 int 列,然后将值限制在 1 到 1000 之间——不能在 MySQL 中自动强制执行)。 SQL Server 提供全文索引、原生 XML 列和操作、多种事务模式、复杂的安全产品、复制和分布式功能,以及出色的管理套件。
关于您的 C# 注释,是的,SQL Server 具有导入 CLR 对象的能力,这意味着您可以编译一些 .Net 代码并将其放入 SQL Server 并拥有使用它的数据库函数。这对于创建新的聚合函数特别有用,因为您可以绕过游标并使用更快的 CLR 代码循环。
您还可以优化 SQL Server,直至其使用的锁定和隔离模式,以及给定线程可以使用的 CPU/内存。
另一方面,MySQL 是免费且相对容易设置的,具有足够的选项,大多数网站所有者都非常乐意将其用于基本的 CRUD 应用程序。
如果你想使用 Linq2Sql,那么你需要 SQL Server。如果您需要大量高级功能,SQL Server 无疑是最佳选择。
【讨论】:
感谢您的信息 - 但是关于可移植性,SQL Compact 服务器真的像 MySQL 一样“可移植”吗? SQL "Compact" 比 MySQL 更便携;认为它类似于 SQLite。【参考方案5】:从开发(编码)的角度来看,我曾与 Java 开发人员和 C# 开发人员一起工作过(在各种项目中都连接到两者,因此 Java 到 SQLServer,Java 到 MySQL,C# 到 MySQL,C# 到 SQLServer)。就个人而言,尽管我没有做任何太复杂的事情,但我并没有真正注意到有太大的不同。如果你认为会有一个陡峭的学习曲线,我认为没有太多可担心的,除非你想深入了解一些真正的服务器特定的东西。有一些细微的差异,但没有什么是人们不会很快理解的。
【讨论】:
【参考方案6】:我使用过这两种方法,但更多的是使用 SqlServer。在大型商店中,尤其是在 DB 架构师提出许多应用程序架构决策的情况下,SQL Server 提供了更多功能。复制、SSIS 等。但是,这些都增加了很多复杂性,并且根据我的经验,它们是大部分操作中断的根源。
但作为软件应用程序的数据存储,MySql 可以满足您的需求,而且简单、可靠、快速且简单。
严格来说,您确实希望应用程序代码中包含应用程序逻辑,而不是复杂的 SQL 和约束定义。在您的数据存储中获取基础知识,并将您节省的时间投入到程序本身中。
【讨论】:
您关于在应用程序代码中包含应用程序逻辑的最后一条评论是普遍的智慧。我参与过许多企业应用程序,这些应用程序在存储过程中包含大量数据处理代码,它运行良好并且比代码中的速度更快。【参考方案7】:您是否考虑过像 PostgreSQL 这样功能更全面的开源数据库。 SQL Server 没有任何问题,但它确实开始将您吸引到许可的软件中,如果您仍然使用开源对应部分,您可以远离该软件。这一切都取决于你是否可以。
【讨论】:
以上是关于C# - MySQL 与 Microsoft SQL Server [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure Devops 上运行 SQ 不会扫描所有文件/子文件夹/项目,尤其是 c# 文件
Postgresql odbc driver error c# [IM002] [Microsoft][ODBC Driver Manager] Data source name not found
在使用 C# 时对设置与 Microsoft Access 数据库的连接感到困惑
C# mysql 编写ASP.NET遇到的问题,百思不解啊,请高手指点! mysql 表,id content 1 恭喜您中奖 2 谢谢你