2012-12-12 59 views
0

我使用实体框架使用.skip.take实施分页。这工作正常,但是当我获取10万条记录的数据库中的记录数(对于网格页码而言UIClient需要计数)时,它占用大量时间,大约600毫秒,这是很大的。使用实体框架进行分页时的性能问题

如果我不使用计数只有寻呼实现,那么它几乎需要20到25毫秒。如何进行高效计数?我如何从600毫秒降低到50毫秒左右?我用

示例查询:

int count = (from c in dbcontext.Customer 
      where c.customerName ='xyz' && c.date >= 'dateTime' 
      select c.CustomerId).Count(); 

我有索引上NamedateTimeCustomerId是主键。

由于提前,

阿希奈

+0

这是''dateTime''值的占位符?什么是'c.date'属性的类型? – rcdmk

回答

1

你可以使用SQL Server Profiler来抓住从实体框架生成的查询,通过查询分析器在SQL Server Management Studio中运行呢?

从那里您可以看到执行计划并查看瓶颈发生的位置,并调整您的代码以更好地执行。

我认为这个信息会越来越明显。

0

尝试使用你已经在使用分页之前的记录数,看是否performes更好:

var records = (from c in dbcontext.Customer where c.customerName ='xyz' && c.date >= 'dateTime' select c.CustomerId); 

var total = records.Count; 
var pagedRecors = records.Skip((currentPage - 1) * recordsPerPage).Take(recordsPerPage).ToList(); 
+0

好主意 - **但是:**因为'CustomerId'是主键,最有可能它也是集群键,因此您的语句将导致*聚簇索引扫描*(即**全表扫描** )所以我不认为这会节省时间,真的。 –