LinqToSQL查询性能和定位.ToList()

时间:2014-11-21 12:43:24

标签: c# sql performance linq entity-framework

我有以下实体框架linq查询,它为不同的客户ID执行了数百次,并可能返回数百个项目:

var events = Context.Events.AsNoTracking().Where(l => l.CustomerID == customerId &&
                    l.DateTime >= startDate && l.DateTime <= endDate &&
                    l.EventType != "SomeType" && l.Category.Contains("someString")
                    .OrderBy(l => l.DateTime).ThenBy(l => l.ProductId).ToList();

我一直在考虑这个查询的性能,并想知道在查询中先前添加ToList是否会提高性能。我尝试了以下内容,看到速度提高了20%,但我不确定这是否是偶然的:

var events = Context.Events.AsNoTracking().Where(l => l.CustomerID == customerId)
                    .ToList().Where(
                    l.DateTime >= startDate && l.DateTime <= endDate &&
                    l.EventType != "SomeType" && l.Category.Contains("someString")
                    .OrderBy(l => l.DateTime).ThenBy(l => l.ProductId).ToList();

我认为这是因为ToList将具有相关客户ID的所有事件带入内存,然后其余的过滤和排序在C#中而不是在SQL中发生在内存中。

这让我想到,在内存列表中的C#中执行哪些操作比在linqToSQL中更快?

我听说过字符串的contains(),而且SQL中的orderBy很慢,C#中内存列表的速度是否更快?

是否有指导我应该在内存中执行哪些操作以及我应该在SQL中执行哪些操作?

0 个答案:

没有答案