Меня интересует производительность SQL-запросов, выполняемых в SQL Server и используемых в ADO.NET и LINQ-to-SQL.
Я использую базу данных AdventureWorks
с расширенной таблицей Sales.SalesOrderDetailEnlarged
который имеет почти 5 миллионов строк. Выполнение запроса
select *
from Sales.SalesOrderDetailEnlarged
длится около 37 секунд в SQL Server, но выполнение того же запроса в ADO.NET составляет около 21 секунды. Для измерения времени выполнения я использую секундомер и SQL Server Profiler.
// 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. Время выполнения запроса с использованием Linq-to-SQL длится около 12-13 секунд
var query = from salesOrderDetail in dataContext.SalesOrderDetailEnlargeds
select salesOrderDetail;
//stopwatch start
query.ToList();
//stopwatch stop
Может кто-нибудь объяснить:
Не следует ли выполнять запрос в SQL Serverбыстрее, чем ADO.NET?
Как сравнить время выполнения этого запроса для ADO.NET и Linq-to-SQL? Linq-to-SQL на самом деле является слоем поверх ADO.NET, так почему он быстрее, чем ADO.NET (или, может быть, я пытаюсь измерить его неправильно)?