SQL Server、ADO.NET和LINQ to SQL中查询的性能比较
我想知道SQL Server中执行的SQL查询以及ADO.NET和LINQ to SQL中使用的SQL查询的性能 我将AdventureWorks数据库与扩展的Sales.SalesOrderDetails表一起使用,该表几乎有500万行。执行查询SQL Server、ADO.NET和LINQ to SQL中查询的性能比较,sql,sql-server,performance,linq-to-sql,ado.net,Sql,Sql Server,Performance,Linq To Sql,Ado.net,我想知道SQL Server中执行的SQL查询以及ADO.NET和LINQ to SQL中使用的SQL查询的性能 我将AdventureWorks数据库与扩展的Sales.SalesOrderDetails表一起使用,该表几乎有500万行。执行查询 select * from Sales.SalesOrderDetailEnlarged 在SQL Server中持续约37秒,但在ADO.NET中执行相同查询的时间约为21秒。为了测量执行时间,我使用秒表和SQLServer探查器 // thi
select *
from Sales.SalesOrderDetailEnlarged
在SQL Server中持续约37秒,但在ADO.NET中执行相同查询的时间约为21秒。为了测量执行时间,我使用秒表和SQLServer探查器
// this is how I perform command execution in ADO.NET
using (SqlConnection sqlConnection = new SqlConnection(GetConnectionString()))
{
sqlConnection.Open();
DataSet table = new DataSet();
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(commandQuery, sqlConnection))
{
//stopwatch start
sqlDataAdapter.Fill(table);
//stopwatch stop
}
}
对于Linq to SQL,我有这样一个查询,它相当于ADO.NET中使用的查询。使用LINQtoSQL执行查询的时间大约为12-13秒
var query = from salesOrderDetail in dataContext.SalesOrderDetailEnlargeds
select salesOrderDetail;
//stopwatch start
query.ToList();
//stopwatch stop
谁能解释一下:
要添加到前面的答案中,还请记住Sql server为查询计划和数据保留缓存 当您想要比较不同的请求时,您应该在每次测量之前使用以下命令或其他方式清除这些情况(使用alter database clear procedure\u cache重新启动服务器…请参阅) 如果不这样做,第二个度量可能会给出更好但错误的结果,因为数据或计划可能在这些缓存中
HTH您执行查询的顺序是什么?您是否认为存在某种缓存Sql Server端?我以不同的顺序执行了查询,但结果仍然相同。我不知道服务器端有任何可用的缓存。您是说您使用探查器跟踪了问题中代码的执行,并看到探查器报告的持续时间为37秒,秒表报告的持续时间为21秒?我只看到SQL跟踪报告的持续时间较短。SSMS查询显示结果,这需要相当长的时间。另外两个没有。创建数据表也需要时间。换句话说,您正在比较3个完全不同的进程。@mikemon,使用SSMS运行SQL查询不是“在SQL Server中”。SSMS与其他任何应用程序一样是ADO.NET客户端应用程序,探查器报告的持续时间将包括应用程序消耗大量结果所需的时间。我认为如果您在SSMS中使用discard results选项运行查询,您将看到与ADO.NET代码类似的计时,而ADO.NET代码不包括在时间内呈现大型结果集。谢谢您的建议!:)
int rows = 0;
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
rows+=1;
}
}
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS