我想知道在SQL服务器中执行并在ADO. NET和LINQ-to-SQL中使用的SQL查询的性能。
我使用的AdventureWorks
数据库与扩展的销售。SalesOrderDetailEnlarged具有几乎500万行的
表。执行查询
select *
from Sales.SalesOrderDetailEnlarged
在SQL服务器中持续约37秒,但在ADO. NET中执行相同的查询约为21秒。为了测量执行时间,我使用秒表和SQL服务器分析器。
// 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中使用的查询。网使用Linq to SQL执行查询的时间大约为12-13秒
var query = from salesOrderDetail in dataContext.SalesOrderDetailEnlargeds
select salesOrderDetail;
//stopwatch start
query.ToList();
//stopwatch stop
谁能解释一下:
>
SQL服务器中的查询执行不应该比ADO. NET更快吗?
如何比较ADO查询的执行时间。NET和Linq到SQL?Linq to SQL实际上是ADO之上的一个层。NET,那么为什么它比ADO更快呢。NET(或者我试图以错误的方式测量它)?
要补充前面的答案,还要记住Sql server为查询计划和数据保留缓存。
当您想要比较不同的请求时,您应该在每次测量之前使用以下命令或其他方式清除这些情况(重新启动服务器,使用alter database clear procedure_cache…查看如何清除SQL server查询缓存?)
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
如果不这样做,第二个度量可能会给出更好但错误的结果,因为数据或计划可能在缓存中。
嗯
Linq to SQL实际上是ADO之上的一个层。NET,那么为什么它比ADO更快呢。网
阿多。NET有两层。DataReader是较低级别的,由ADO和ADO使用。NET代码和L2S/EF代码。ADO中的更高级别。NET是DataSet/DataTable/DataAdapter,这是一组用于将查询结果加载到内存中的类。这不是L2S/EF使用的。
为了只测量查询处理和向客户机传输结果。在DataReader中读取()行,但不要对数据执行任何操作。
如
int rows = 0;
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
rows+=1;
}
}
问题内容: 我正在尝试在SQL Server Profiler(2005)中查看Linq生成的SQL到SQL。 我可以看到从linq到sql以外的任何其他设备发送到服务器的sql。 我敢打赌,我需要更改跟踪的事件选择,但不确定要选择什么。 我目前仅选择此选项:SQL:StmtCompleted-TextData和SPID 我既不想使用数据上下文日志记录,也不想使用SQL Debug Visuali
问题内容: 我首先使用实体代码。索引列: SourceCatalogId Disabled CategoryPath 表中的4万行 我的问题是查询需要40秒钟! 通过sql profiler进行的SQL: 在where子句中的最后一个子句中,如果我在以下位置删除“ scape N”〜“ ”: 查询需要4秒。 正常吗?索引用途?我如何用startWith解决呢? 编辑 categoryPath的
问题内容: .NET 3.5,C# 我有一个具有“搜索”功能的网络应用程序。可搜索的某些字段是表中的第一类列,但实际上其中一些是XML数据类型内的嵌套字段。 以前,我构建了一个用于动态构造用于搜索的SQL的系统。我有一个很好的类层次结构,可以构建SQL表达式和条件语句。唯一的问题是它不受SQL注入攻击的威胁。 我正在阅读Rob Conery的精彩文章,该文章指出,如果从未枚举IQueryable结
问题内容: 我对此进行了一些研究,并浏览了StackOverflow上的一些文章以及一些博客文章,但是没有找到确切的答案。我还读到可以使用4.0框架来实现,但尚未找到任何支持证据。 所以我的问题是,是否可以通过LINQ to SQL查询执行SOUNDEX? 问题答案: 您可以通过使用伪造的UDF在数据库上执行此操作;在部分类中,向数据上下文添加一个方法: 您可以使用像这样的表达式:
问题内容: 当前,我们有一个独立的实体框架,该框架依赖于DB独立的ORM。 我必须构建一个软件,以将数据库中的元数据批量加载到大约150个excel模板中(以及有关单元格位置,单元格类型,格式等的信息)。 我可以操作 通过SQL批处理(更快,但交互性更差) 通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后将修改提交给数据库 我知道SQL绝对快,但是我知道… 它快多少? 详细
问题内容: 给定一个简单的模式,例如PurchaseOrders {OrderId,Total,LineItemCount},我想为一些简单的统计信息生成一个简单的查询,如下所示: 但是在Linq to Sql中,我正在努力将其纳入一个查询中。 目前,我有这个: 有没有一种方法可以将其作为一个查询来完成? 问题答案: 我能想到的是给它一个假的group-by子句。它可以正常工作,并能按您期望的那样