0

我将首先描述商业案例。如果你只是想问这个问题,请跳过前面的几段......

我正在通过 Web 从 ASP.NET Web API 服务器同步 .NET 移动客户端上的数据。由于客户端的“移动性”,我希望该过程尽可能高效,因此我想实现增量同步,这意味着客户端从指定日期请求新条目,这通常会是最后一个同步日期。

我正在单独处理条目删除,所以为了简单起见,让我们关注新的和修改的条目。

正在同步的表太大而无法容纳单个响应,因此实现了分页。

表中的每个条目都有一个唯一的 ID和一个LastUpdated列。在服务器上,我使用以下代码响应请求的页面:

var set             = Model.Set<T>().Where(t => String.Compare(t.LastUpdated, fromDate, StringComparison.Ordinal) >= 0).OrderBy(t => t.Id);
var queryResultPage = set.Skip(pageSize * pageNumber).Take(pageSize);

return queryResultPage.ToList();

Model.Set 是从中检索数据的 DbSet。请忽略我必须使用字符串来表示日期的事实......

我的问题是,什么 SQL Server 表索引会在这种情况下产生最佳性能?

4

1 回答 1

1

Pleun 完全正确。我最近在 CRM 2011 平台上为客户做了一个演示。我向他们展示了一个案例,在对 220 万条记录和另外 450 万条记录进行排序后,页面浏览需要大约 30 秒才能加载页面。

使用 SQL Profiler,您可以找到正在运行的查询。将其放入 SQL Management Studio(根据需要对其进行清理以使其成为标准 SQL)然后运行执行计划并查找它建议的索引(尤其是它说缺少的索引)

无论如何,在我给客户的演示中,在我们完成此操作后,查询下降到不到一秒;页面加载时间大约为 4 秒(这仍然很可怜)。

于 2013-02-06T23:03:46.010 回答