在azure存储上执行查询非常慢

时间:2016-04-13 05:39:29

标签: azure azure-table-storage

我正在尝试查询天蓝色表存储上的timestamp列。我有一个where条件,检查输入值是否大于timestamp值。 azure时间戳列不是分区键或行键。我开始知道查询不是分区的列或行密钥会降低查询执行的性能。当有越来越多的记录时,我的应用程序非常慢。我试图将时间戳数据移动到分区键数据,但分区键不接受时间戳值,如“4/13/2016 5:20:03 AM +00:00”。什么是提高查询性能的最佳选择。

1 个答案:

答案 0 :(得分:5)

正如您已经提到的,如果查询不包含PartitionKey和/或RowKey,则查询将会很慢,因为Table服务正在执行全表扫描。建议将日期/时间值用作PartitionKey值。

  

我尝试将时间戳数据移动到分区键数据但是分区   key不接受时间戳值,如" 2016/4/13 5:20:03 AM   00:00"

这是因为该值包含不允许的字符(https://msdn.microsoft.com/en-us/library/azure/dd179338.aspx - >请参阅Characters Disallowed in Key Fields部分)。

实际上你可以采取一些措施来解决这个问题:

  • 您可以YYYY-MM-DDThh:mm:ss格式设置日期/时间值的格式。
  • 您可以将日期/时间值转换为刻度并在前面添加一些零并保存为PartitionKey。类似的东西:

    PartitionKey Value = YourDateTimeValue.Ticks.ToString(" d19");

如果您希望最新的条目出现在最顶层,您可以执行以下操作:

PartitionKey Value = (DateTime.MaxValue.Ticks - YourDateTimeValue.Ticks).ToString("d19");

您可能还会发现这有用:https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/