我正在使用以下代码选择我在
中标记的所有照片select pid from photo_tag where subject = me()
但现在我只想选择某张专辑中的照片,我有两种方法可以做到这一点。
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 )
据我所知,他们都做同样的事情并且工作正常。
问题是它与第二张,第三张等专辑的效果不佳。
如果我执行以下操作
select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 or aid = $aid2)
它只会选择其中一张相册中的照片而不是两张相同的照片,如果我更换或使用它,它会选择第一张专辑中标记的照片和第二张专辑中的所有照片。
所以查询最终会变成像
这样的东西 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分钟前开始运行查询并且仍在加载,所以我不认为它永远都会回归任何东西。
如果我单独查询每张专辑,而不是将所有专辑放在一起,会更快吗?
还有什么可能更好。
我感谢你们的任何帮助。
由于
答案 0 :(得分:0)
开始查看多个查询并批量处理,这样可以提高您的效果。
因此,您的上一个查询将是以专辑分隔的批处理数组,每次调用都是photo
和photo_tag
表之间的多查询。