数据存储区索引异常,虽然我已经定义了相同的索引

时间:2015-05-21 11:15:21

标签: java google-app-engine google-cloud-datastore

我有一个实体王review,如下所示属性和值

Review {
 merchantId : 'X',
 appId : 'Y',
 productId : 'Z',
 reviewId : '12345',
 timeStamp : '1493482784728',
 viewtimestamp : '148834892374'
}

我已将索引定义如下

<datastore-index kind="review" ancestor="false" source="manual">
        <property name="merchantId" direction="asc"/>
        <property name="appId" direction="asc"/>
        <property name="productId" direction="asc"/>
        <property name="reviewId" direction="asc"/>
        <property name="timeStamp" direction="desc"/>
        <property name="viewtimestamp" direction="desc"/>
    </datastore-index>

我的查询如下

SELECT reviewId FROM review WHERE merchantId = X AND appId = Y AND productId = Z;

当我执行此查询时,我得到了索引sugession

<datastore-index kind="review" ancestor="false" source="manual">
    <property name="appId" direction="asc"/>
    <property name="merchantId" direction="asc"/>
    <property name="productId" direction="asc"/>
    <property name="reviewId" direction="asc"/>
</datastore-index>

我在这里遗漏了什么?如何决定订单?请帮忙

1 个答案:

答案 0 :(得分:3)

索引不会那样。如果系统找不到您查询的精确索引,则不会返回。

拥有更复杂的索引并尝试使用该索引提供查询意味着数据存储区需要进行一些计算而不是直接查找。数据存储区不会这样做。

如果您希望查询通过AT ALL,则需要为它们编制索引,否则它将无法运行。如果您没有所有索引,唯一的区别是zigzag merge join algorithm可以帮助您提供查询服务。但你不能只依靠它,因为它无法满足一切,它需要部分索引