我想运行查询以获取相册中的用户相册ID,姓名和图片计数。此查询有效:
SELECT album.id, album.name, count(pictures.*)
FROM album
LEFT JOIN pictures
ON (pictures.album_id=album.id)
WHERE album.owner = ?
GROUP BY album.id;
我有大量的图片和很多相册,但是在为我感兴趣的用户进行过滤之前,联接正在运行。
我已经看到其他答案根据第二个表格的值在连接内部进行过滤,但我想过滤第二个表格中未包含的album.owner。如何在加入前过滤? (它是否有效?我会破坏索引吗?)
答案 0 :(得分:2)
对于此查询:
SELECT a.id, a.name, count(p.album_id)
FROM album a LEFT JOIN
pictures p
ON p.album_id = a.id
WHERE a.owner = ?
GROUP BY a.id;
您需要album(owner, id, name)
上的索引。这可以加快您的查询速度。
然而,如果用这样的措辞,它可能会更快:
SELECT a.id, a.name,
(SELECT count(*)
FROM pictures p
WHERE p.album_id = a.id
)
FROM album a
WHERE a.owner = ?
在这里,您需要上述索引和pictures(album_id)
上的索引。