0

次のコードを使用して、タグ付けされたすべての写真を選択しています

select pid from photo_tag where subject = me()

しかし今、特定のアルバムから写真だけを選択したいのですが、これを行うには 2 つの方法があります。

select pid from photo where aid = $aid1 and pid in ( select pid from photo_tag where subject = me() )

また

select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 )

私が知る限り、どちらも同じことをしており、問題なく動作しています。

問題は、2 枚目、3 枚目などのアルバムではうまく機能しないことです。

私が次のことをしたら

select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 or aid = $aid2)

または を置き換えると、両方ではなくいずれかのアルバムから写真のみが選択され、最初のアルバムからタグ付けされた写真と 2 番目のアルバムからすべての写真が選択されます。

したがって、クエリは最終的に次のようなものになります

 SELECT pid from photo where ( pid in (select pid from photo where aid = $aid1 and pid in (select pid from photo_tag where subject = me() ) ) or pid in (select pid from photo where aid = $aid2 and pid in (select pid from photo_tag where subject = me() ) ) )

タグ付けされたすべての写真を取得するクエリを実行すると、約 900 ミリ秒かかり、私の知る限り、数百枚の写真が返されます。これを約 6 または 7 枚のアルバム、つまり約 150 枚の写真に制限しようとしていますが、約 15 分前にクエリの実行を開始し、まだロードしているため、クエリは十分に効率的ではないと思います。何かを返すことはありません。

すべてのアルバムをまとめてクエリするよりも、各アルバムを個別にクエリしたほうが速くなりますか?

他に何が良いでしょうか。

ここで何か助けていただければ幸いです。

ありがとう

4

1 に答える 1

0

マルチクエリとバッチの調査を開始すると、パフォーマンスが向上するはずです。

したがって、最後のクエリはアルバムで区切られたバッチの配列呼び出しになり、各呼び出しはテーブルphotophoto_tagテーブルの間のマルチクエリになります。

https://developers.facebook.com/docs/reference/api/batch/

于 2013-06-17T12:50:26.550 に答える