LINQ 문을 실행할 때 성능 향상을 위해 열의 배치가 중요합니까?열의 배치가 성능 향상을 위해 중요한 요소입니까?
예를 들어 다음 검색어 중 가장 빨리 실행되는 것은 무엇이며 그 이유는 무엇입니까?
A)
var query = from o in entities.orders
join i in entities.order_items
on o.OrderId equals i.OrderId
where o.AddedSalesOrder == 0
select new
{
i.ShippingFirstName,
i.ShippingLastName,
i.Sku,
i.Quantity,
i.ItemPrice,
o.TotalShippingCost,
o.OrderId,
o.OrderCreateDate
};
B)
var query = from o in entities.orders
join i in entities.order_items
on o.OrderId equals i.OrderId
where o.AddedSalesOrder == 0
select new
{
o.TotalShippingCost,
o.OrderId,
o.OrderCreateDate,
i.ShippingFirstName,
i.ShippingLastName,
i.Sku,
i.Quantity,
i.ItemPrice
};
C)
var query = from o in entities.orders
join i in entities.order_items
on o.OrderId equals i.OrderId
where o.AddedSalesOrder == 0
select new
{
o.OrderCreateDate,
i.ShippingFirstName,
i.ShippingLastName,
o.TotalShippingCost,
o.OrderId,
i.Sku,
i.Quantity,
i.ItemPrice
};
내가 쿼리 B를 기대하고하는 것은 인해에 대한 열의 위치에 가장 효율적으로 조인하면 더 깔끔한 SQL 코드가 생성되지만 잘못된 것일 수 있습니다.
중요한 경우 쿼리는 SQL Server 2008r2 데이터베이스에서 실행되고 있습니다.
그 가치, 나는 성능이 각 시나리오에 행동 방식을 볼 수 C#을 통해 신속하게 (확실하게 비 절대) 벤치 마크를 실행 무엇을 위해 --Edit--
. 내 연구 결과는 다음과 같습니다 :
a) 297.61 millisecond avg over 100000 iterations
b) 245.90 millisecond avg over 100000 iterations
c) 304.16 millisecond avg over 100000 iterations
나는 다음과 같이이 테스트하는 데 사용되는 코드 :
var sw = new Stopwatch();
List<long> totalTime = new List<long>();
for (int u = 0; u < 100000; u++)
{
sw.Start();
var entities = new Entities();
var query = from o in entities.orders
join i in entities.order_items
on o.OrderId equals i.OrderId
where o.AddedSalesOrder == 1
select new
{
i.ShippingFirstName,
i.ShippingLastName,
i.Sku,
i.Quantity,
i.ItemPrice,
o.TotalShippingCost,
o.OrderId,
o.OrderCreateDate
};
var qc = query.Count();
sw.Stop();
totalTime.Add(sw.ElapsedMilliseconds);
sw.Reset();
}
Console.WriteLine("Average time in Milliseconds: {0}", totalTime.Average());
조인 된 컬럼의 순서는 실행 속도에 영향을 미칠 수있는 것으로 보인다 - 또는이 지적되었다 내 데이터베이스가 비효율적 일 수 있습니다 :)
어쨌든, 나는이 흥미로운 것을 발견 한 모든 사람들에게 결과를 게시하고 싶었습니다.
sql의 버전이 다른지 확인 했습니까? –