MySQL和SQL Server之间的差异

时间:2008-08-14 03:13:27

标签: mysql sql-server tsql

我是ASP.NET开发人员,他使用Microsoft SQL Server来满足我的所有数据库需求(包括工作和个人项目)。

我正在考虑为我的一些个人项目试用LAMP堆栈。

MySQLSQL Server之间有哪些主要区别?在MySQL中使用stored procedures是一种常见做法吗?

您建议的任何建议或资源可以帮助我切换?

对于有这两方面经验的人,MySQL是否有任何缺失的功能?

12 个答案:

答案 0 :(得分:139)

您需要注意的一件事是SQL Server和MySQL实现SQL语法的方式存在相当严重的差异。

这是一个不错的Comparison of Different SQL Implementations

例如,看一下top-n部分。在MySQL中:

SELECT age
FROM person
ORDER BY age ASC
LIMIT 1 OFFSET 2

在SQL Server(T-SQL)中:

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC

答案 1 :(得分:47)

这里的很多评论听起来更像是宗教争论,而不是现实生活中的陈述。 我已经使用MySQL和MSSQL工作了多年,两者都是很好的产品。 我主要根据您正在处理的环境选择MySQL。大多数开源项目都使用MySQL,因此如果您朝着这个方向前进,MySQL就是您的选择。如果你用.Net开发一些东西,我会选择MSSQL,不是因为它好多了,而是因为这是大多数人使用的。 我实际上目前正在使用ASP.NET与MySQL和C#的项目。它完美无缺。

答案 2 :(得分:23)

我无法相信没有人提到MySQL不支持Common Table Expressions(CTE)/“with”语句。这是一个非常烦人的差异。

答案 3 :(得分:15)

MySQL更有可能出现数据库损坏问题,并且当它们发生时它不会自动修复它们。我从6.5版开始就使用MSSQL,并且不记得数据库脱机时的数据库损坏问题。我曾在生产环境中与MySQL合作过几次,数据库损坏问题使整个数据库脱机,直到我们从命令行运行魔法“请修复我的损坏的索引”。

根据我的经验,MSSQL的事务和日志系统几乎可以处理任何事情 - 包括电源循环或硬件故障 - 没有数据库损坏,如果出现问题,它会自动修复它。

这是我的经历,我很高兴听到这个问题已得到解决,或者我们做错了什么。

http://dev.mysql.com/doc/refman/6.0/en/corrupted-myisam-tables.html

http://www.google.com/search?q=site%3Abugs.mysql.com+index+corruption

答案 4 :(得分:7)

坦率地说,我找不到使用MySQL而不是MSSQL的单一理由。之前的问题是成本,但SQL Server 2005 Express是免费的,有很多网络托管公司提供完全托管sql server每月不到$ 5.00。

MSSQL更易于使用,并且具有MySQL中不存在的许多功能。

答案 5 :(得分:7)

MySQL中的所有内容似乎都比MSSQL更接近金属,而且文档也是这样对待的。特别是对于优化,您需要了解索引,系统配置和优化器在各种情况下的交互方式。

“优化器”更像是一个解析器。在MSSQL中,您的查询计划通常是一个惊喜(通常是好的,有时不是)。在MySQL中,它几乎完成了你要求它做的事情,就像你期望的那样。这意味着你自己需要深入了解它可能采取的各种方式。

不是围绕一个好的TRANSACTION模型构建的(默认的MyISAM引擎)。

文件系统设置是您的问题。

所有数据库配置都是您的问题 - 尤其是各种缓存大小。

有时似乎最好将它视为一种特殊的,美化的isam。 Codd和Date在这里没有多大意义。他们会说没有尴尬。

答案 6 :(得分:5)

我认为需要注意的一个主要问题是MySQL 5.0之前的版本没有视图,触发器和存储过程。

MySQL 5.0 Download page中解释了更多这方面的内容。

答案 7 :(得分:4)

两者都是DBMS的产品Sql服务器是一个商业应用程序,而MySql是一个opensouces应用程序。产品包含类似的功能,但是sql server应该用于企业解决方案,而mysql可能适合较小的实现。如果你需要功能像恢复,复制,granalar安全和重要,你需要sql server

MySql在磁盘上占用的空间更少,并且比sql server

使用更少的内存和CPU

答案 8 :(得分:4)

@abdu

我发现MySQL拥有超过MSSQL的主要功能是时区支持 - 能够在时区之间进行快速更改,尊重夏令时非常棒。

比较一下:

mysql> SELECT CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles');
+-----------------------------------------------------------------+
| CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles') |
+-----------------------------------------------------------------+
| 2008-04-01 05:00:00                                             |
+-----------------------------------------------------------------+

涉及this answer所涉及的扭曲。

关于“更容易使用”的评论,我想说的是,它们是不同的,如果你知道一个,那么学习另一个会有开销。

答案 9 :(得分:3)

  

任何人都有任何良好的经验   SQL Server中数据库的“端口”   到MySQL?

这应该是相当痛苦的!我将MySQL的版本从4.x切换到5.x,并且各种语句将不再像以前那样工作了。查询分析器已经“改进”,因此之前根据性能进行调整的语句将不再像预期的那样工作。

从使用500GB MySQL数据库中吸取的教训:这是一个微妙的主题,除了微不足道之外的其他任何事情!

答案 10 :(得分:2)

@Cebjyre。 IDE无论是Enterprise Manager还是Management Studio都比我迄今为止看到的MySQL更好。我说“更容易使用”,因为我可以在MSSQL中做很多事情,而MySQL没有对应物。在MySQL中,我不知道如何通过查看查询计划或查看统计信息来调整查询。 MSSQL中的索引调整向导会对丢失或放错位置的索引进行大部分猜测。

MySQL的一个缺点是数据库没有最大大小。数据库只会增加大小,直到它填满磁盘。想象一下,如果这个磁盘与其他用户共享数据库,并且突然他们的所有查询都失败了,因为他们的数据库无法增长。我很久以前就向MySQL报告了这个问题。我不认为它已经修好了。

答案 11 :(得分:1)

花费一些时间使用MySQL从MSSQL到MySQL语法POV我一直发现自己的能力有限。

在更新过程中重新生成同一个表时,更新表会有一些奇怪的限制。

此外,UPDATE FROM不起作用,上次我检查它们也不支持Oracle MERGE INTO语法。这对我来说是一个显示阻止,我不再认为在那之后我会在任何地方使用MySQL。