4

ジグザグマージ結合アルゴリズムについて質問があります。記事https://developers.google.com/appengine/articles/indexselectionで言及

Index(Photo, owner_id, -date), 
Index(Photo, size, -date)

結合してなることができます

Index(Photo, owner_id, size, -date) ;

以下の私のテスト:

  <datastore-index kind="KindTest1" ancestor="false" source="auto">
        <property name="hideIt" direction="asc"/>
        <property name="voteCount" direction="desc"/>
    </datastore-index>

    <datastore-index kind="KindTest1" ancestor="false" source="auto">
        <property name="hideIt" direction="asc"/>
        <property name="createdByDate" direction="asc"/>
    </datastore-index>

can these 2 indexes combine to become,

    <datastore-index kind="KindTest1" ancestor="false" source="auto">
        <property name="hideIt" direction="asc"/>
        <property name="createdByDate" direction="asc"/>
        <property name="voteCount" direction="desc"/>
    </datastore-index>

メールを送信する理由は、これを開発環境と本番環境で試してみたところ、機能せず、それぞれ個別のインデックスが必要だったからです。もっと詳しく説明できますか?

4

1 に答える 1

5

App Engine のジグザグ マージ結合アルゴリズムは、同じプロパティで並べ替えられた個別の小さなインデックスをスキャンして得られた結果を組み合わせることで、必要なインデックスを削減し、これらのインデックスに共通の結果を提供するのに役立ちます。そのため、Google のドキュメントに示されている例では、インデックス onowner_idの並べ替え順序は on でdate(desc)あり、インデックス onsizeの並べ替え順序は date(desc). したがって、これらの両方のプロパティに対して同じ並べ替え順序の日付 (降順) でクエリを実行する場合、ジグザグ マージは 2 つの個別のインデックスを使用して結果を見つけるため、追加の結合インデックスを回避できます。

あなたの例では、同じプロパティでソートされていないため、2 つのインデックスを結合することはできません。したがって、クエリには対応するインデックスが必要になります。ジグザグマージ結合を利用できるデータを使用した架空の例を示します。

2 つのインデックスが上記のようで、どちらも でソートされhideIt(asc)ている場合、クエリがある場合voteCount,createdByDate,hideIt 、この組み合わせに追加のインデックスは必要なく、既存の 2 つのインデックスが目的を果たします。

于 2013-06-30T04:15:35.967 に答える