最近のGoogle App Engineでは、課金額節約のために、不要なシングルプロパティインデックスを削除するチューニングを行いますよね。

でも何でもかんでも unindexes にする訳にはいかないです。

シングルプロパティインデックスを使うQueryとかには必要な訳です。そもそもコンパイルが通らなくなるので間違えようがありません。

じゃあそれだけ気をつけて、あとはカスタムインデックスで対応しようとすると、特定のEntityがクエリによって見えたり見えなかったりする不具合に遭遇しました。

ある程度データがあるEntityの特定のプロパティを @Attrbute(persistend = false) すると、その後に生成されたEntityに関しては、そのプロパティを含むインデックスにエントリが保持されない様です(DatastoreNeedIndexException とかそういうのでなく、あたかもEntity.setUnindexedProperty()した様な振る舞い)。

どうやら、appengine のカスタムインデックスに含まれるプロパティに対して、シングルプロパティインデックスを無効にすると、該当するカスタムインデックスは作成されない様です。(slim3 1.0.15 + appengine sdk 1.6.4)

カスタムインデックスに関しては、個別にインデックスが作られるイメージで理解してましたが、シングルプロパティインデックスを参照しているんですね。知らなかったです。