RowKey と PartitionKey 以外のデータをクエリすると、テーブル全体がスキャンされることをどこかで読みました。クエリ プロセス全体を適切に理解しようとしていますが、試練全体で少し空虚になりました。
1 つのストレージに数百万行のデータ オブジェクトがあるとします。PartitionKey によってデータのサブセットに分割しています。次の行に沿ってクエリを作成するとします
var query = new TableQuery<MyEntity>()
.Where(TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, pPartition),
TableOperators.And,
TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.GreaterThanOrEqual, startTime));
このクエリはテーブル側でどのように構築されていますか? どのフィルターを最初に適用するかを制御できますか?それはそれらを適用する順序ですか?この場合、最初にたとえば 100k 行のサブセットを取得してから、Timestamp フィルターを適用します。
そもそもこれを検討している理由は、PartitionKey と RowKey の両方を使用して異なるデータを格納して分離したいからですが、できるだけ効率的に日付でクエリを実行できるようにする必要もあります。システムは、このような多くのリクエストでかなりの負荷がかかるため、タイムリーに機能することが重要です。