我下面有一个表查询,该查询通过PK,RK和一个非索引键进行搜索。
这会减慢数据库搜索的速度吗?如果通过c#在Web层上执行,DOB搜索会更快吗?
var name = "John";
var age = 1;
var dob = DateTimeOffset.Parse("1999-1-1");
string usernameFilter2 =
TableQuery.CombineFilters(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, name),
TableOperators.And,
TableQuery.GenerateFilterConditionForInt("RowKey", QueryComparisons.Equal, age)),
TableOperators.And,
TableQuery.GenerateFilterConditionForDate("RowKey", QueryComparisons.Equal, dob));
考虑到PartitionKey / RowKey组合可以有一个实体,我相信查询的第3个过滤条件是多余的(假设您打算在其中包括另一个属性而不是RowKey)。
就查询速度而言,再次考虑要搜索的是具有PartitionKey和RowKey匹配的实体,此查询将是最快的。如果您从查询中删除RowKey并搜索PartitionKey和任何其他未索引的属性,则该查询将变慢,因为查询将进行分区扫描以找到匹配的实体。
[您可能会发现本文有帮助:https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide。