最初にビジネスケースについて説明します。質問だけが必要な場合は、数段落先をスキップしてください...
ASP.NET Web API サーバーから .NET モバイル クライアントのデータを Web 経由で同期しています。クライアントの「モバイル性」により、プロセスをできるだけ効率的にしたいので、インクリメンタル同期を実装したいと思います。つまり、クライアントは指定された日付から新しいエントリを要求します。これは通常、最終同期日になります。
エントリの削除は個別に扱っているので、簡単にするために、新しいエントリと変更されたエントリに注目しましょう。
同期中のテーブルが大きすぎて 1 回の応答に収まらないため、ページングが実装されています。
テーブルの各エントリには、一意の 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 テーブル インデックスがこの場合に最適なパフォーマンスを生み出すかということです。