Azure table 使用分区键、行键和非索引的查询性能
Azure table query performance with partition key, rowkey and non-index
我在通过 PK、RK 和非索引键搜索的下方有一个 table 查询。
这会减慢数据库搜索速度吗? DOB的搜索如果通过c#在web层执行会不会更快?
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));
考虑到 PartitionKey/RowKey 组合可能只有一个实体,我认为您的查询的第三个过滤条件是多余的(假设您打算在那里包含另一个属性而不是 RowKey)。
就查询速度而言,再次考虑到您正在搜索具有匹配的 PartitionKey 和 RowKey 的实体,此查询将是最快的。如果您从查询中删除 RowKey 并搜索 PartitionKey 和任何其他非索引属性,它将变慢,因为查询将执行分区扫描以查找匹配的实体。
您可能会发现这篇文章有帮助:https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide。
我在通过 PK、RK 和非索引键搜索的下方有一个 table 查询。
这会减慢数据库搜索速度吗? DOB的搜索如果通过c#在web层执行会不会更快?
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));
考虑到 PartitionKey/RowKey 组合可能只有一个实体,我认为您的查询的第三个过滤条件是多余的(假设您打算在那里包含另一个属性而不是 RowKey)。
就查询速度而言,再次考虑到您正在搜索具有匹配的 PartitionKey 和 RowKey 的实体,此查询将是最快的。如果您从查询中删除 RowKey 并搜索 PartitionKey 和任何其他非索引属性,它将变慢,因为查询将执行分区扫描以查找匹配的实体。
您可能会发现这篇文章有帮助:https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide。