我将首先描述商业案例。如果你只是想问这个问题,请跳过前面的几段......
我正在通过 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 表索引会在这种情况下产生最佳性能?