我正在使用PHP从分区中检索所有行。我使用以下方法获取所有行
http://www.windowsazure.com/en-us/develop/php/how-to-guides/table-service/#RetEntitiesInPartition
面对一个独特的问题:如果我使用一个分区,则返回结果,使用多个分区和OR子句不返回任何结果。
似乎有两个问题:
使用OR条件进行分区并对其他列进行过滤会导致某些事情发生变化。
PHP SDK(版本2.0)存在问题
任何帮助都将受到高度赞赏,
查询正确使用Partition
列。例如,如果我正在运行此查询(针对两个分区的10行)
( cid eq '18831') and ( (PartitionKey eq '2013100606') or (PartitionKey eq '2013100607') )
当partitionkey使用PHP脚本的OR子句有多个值时,没有响应。使用存储资源管理器应用程序似乎从两个分区拉出10行需要5秒以上。 (我只有10行,两个分区中没有其他数据)
如果我只访问一个分区,则返回行。
( cid eq '18831') and ( (PartitionKey eq '2013100607') ) // Works fine
每个分区有10行,如果我访问单个分区值,它可以正常工作。
另请注意我正在使用expect100Continue和Nagle关闭。
<servicePointManager expect100Continue="false" useNagleAlgorithm="false"/>
</settings>
<connectionManagement>
<add address = "*" maxconnection = "48" />
</connectionManagement>
答案 0 :(得分:1)
基于Windows Azure存储小组的博客文章 - How to get most out of Windows Azure Tables
(向下滚动到帖子中的Queries
部分,第4点),涉及 OR
的查询未经过优化,会导致全表扫描。因此,你可能会遇到问题。
您可能希望更改查询以避免出现这种情况。你可以尝试的一些事情是:
((PartitionKey ge '2013100606') and (PartitionKey le '2013100607')) and (cid eq '18831')
(PartitionKey eq '2013100606' and cid eq '18831') or (PartitionKey eq '2013100607' and cid eq '18831')
看看是否有任何这些帮助。您可以并行激发两个单独的查询,而不是第二个查询。