Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL vs SQL Server 2008 R2简单选择查询性能_Mysql_Sql Server_Performance_Sql Server 2008 - Fatal编程技术网

MySQL vs SQL Server 2008 R2简单选择查询性能

MySQL vs SQL Server 2008 R2简单选择查询性能,mysql,sql-server,performance,sql-server-2008,Mysql,Sql Server,Performance,Sql Server 2008,有人能解释一下为什么MySQL和SQLServer在这个简单的select语句中的性能有巨大的差异吗 SELECT email from Users WHERE id=1 目前数据库只有一个表,有3个用户。MySQL时间平均为0.0003,而SQL Server为0.05。这是正常的还是MSSQL服务器配置不正确 编辑: 两个表的结构相同,主键设置为id,MySQL引擎类型为InnoDB。 我用(NOLOCK)尝试了查询,但结果是一样的。诊断低成本查询的问题是固定成本可能会淹没可变成本。并不是

有人能解释一下为什么MySQL和SQLServer在这个简单的select语句中的性能有巨大的差异吗

SELECT email from Users WHERE id=1
目前数据库只有一个表,有3个用户。MySQL时间平均为0.0003,而SQL Server为0.05。这是正常的还是MSSQL服务器配置不正确

编辑:
两个表的结构相同,主键设置为
id
,MySQL引擎类型为InnoDB。

我用(NOLOCK)尝试了查询,但结果是一样的。

诊断低成本查询的问题是固定成本可能会淹没可变成本。并不是说我是微软的粉丝,但我更熟悉MS-SQL,所以我将主要解决这个问题

MS-SQL在优化和查询解析方面的开销可能更大,这会在决定是否使用索引、查看统计数据等时为查询增加固定成本。MS-SQL在执行查询计划时还记录了大量有关查询计划的信息,并存储了大量数据以备将来的优化,这会增加开销


当查询需要很长时间时,这一切都会很有帮助,但当对单个查询进行基准测试时,结果似乎较慢。

服务器的功率是否相同?硬件也起到了作用。同时访问数据库的人数是否大致相同?是否有任何其他应用程序使用相同的硬件(数据库通常不应与其他应用程序共享服务器)


就我个人而言,我不会担心这种差异。如果您想查看哪一个性能更好,那么可以向数据库中添加数百万条记录,然后测试查询。一般来说,数据库在小表上进行简单查询时都表现良好,即使是设计不好或设置不正确的表。要知道您是否会遇到性能问题,您需要使用大量数据和许多模拟用户在类似于prod的硬件上进行测试。

有几个因素可能会影响该基准测试,但最重要的可能是测试方式

当您运行查询时,MySQL将缓存查询文本和结果。当再次发出相同的查询时,它只会从缓存返回结果,而不会实际运行查询

另一个重要因素是SQL Server指标是总运行时间,而不仅仅是查找该记录或从缓存中提取该记录所需的时间。在SQL Server中,启用SET STATISTICS TIME on将进一步分解它,但您仍然没有真正进行同类比较


最后,我不确定这个基准测试的目标是什么,因为这是一个过于简单的查询。您是否正在比较新项目的平台?你的选择标准是什么

这些表有相似的结构吗?两者是否在
id
上都有(主键)索引?是的,表结构相同,PK设置在
id
上,您对MySQL表使用的引擎类型是什么?我怀疑这可能是由于MySQL和MSSQL发出锁的方式不同。InnoDB使用了一种称为一致非锁定读取的技术,这种技术应该比像MSSQL那样实际锁定行更加轻量级(我没有详细介绍)。您可以在MSSQL上尝试以下查询:
选择id=1的(NOLOCK)用户的电子邮件并进行比较。但这只是一种预感。尝试一个在这两种情况下都不访问任何数据的查询可能会很有趣,例如
选择当前\u时间戳
。问题是MySQL服务器在本地主机上运行,而MSSQL在另一台主机上运行,测量的基准时间包括网络延迟。。。由于您的回答最接近您的答案,我接受它,但要感谢其他人的投入:)是的,我正在比较一个新项目的平台,并首先尝试了一个基本的查询。。。