0

我在通过 PK、RK 和非索引键进行搜索的下方有一个表查询。

这会减慢数据库搜索速度吗?如果通过 c# 在 web 层执行 DOB 搜索会更快吗?

        var name = "John";
        var wins = 20;
        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, wins)), 
                TableOperators.And,
                TableQuery.GenerateFilterConditionForDate("DateOfBirth", QueryComparisons.GreaterThanOrEqual, dob));
4

1 回答 1

1

考虑到 PartitionKey/RowKey 组合可以有一个实体,我相信您的查询的第三个过滤条件是多余的(假设您打算在那里包含另一个属性而不是 RowKey)。

就查询速度而言,再次考虑到您正在搜索具有匹配 PartitionKey 和 RowKey 的实体,此查询将是最快的。如果您从查询中删除 RowKey 并搜索 PartitionKey 和任何其他非索引属性,它会变慢,因为查询将执行分区扫描以查找匹配实体。

您可能会发现这篇文章很有帮助:https ://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide 。

于 2020-01-14T17:39:53.750 回答