我有下表 members :
members
album_id | user_id ------------------- 1 1 1 2 1 4 2 1 2 4 4 1 5 3
具有唯一约束 (album_id, user_id) 。
(album_id, user_id)
我想获得每个库中有多少用户的计数,但前提是库中包含给定的用户。
例如,如果我用 user_id = 4 ,我想得到这样的结果
user_id = 4
album_id | count(user_id) ------------------------- 1 3 2 2
SELECT album_id, count(*) AS ct FROM tbl t JOIN tbl t1 USING (album_id) WHERE t.user_id = 4 GROUP BY 1 ORDER BY 1; -- optional
我在许多可能的解决方案中选择了这种形式,因为它可以在 (user_id) 。
(user_id)
为了获得最佳性能,您有两个索引:一个在 (user_id, album_id) ,并打开另一个 (album_id) (或具有 album 作为前导列)。请参见:
(user_id, album_id)
(album_id)
album
假设 user_id 是 NOT NULL 所以 count(*) 是等效的,但速度更快。请参见:
user_id
NOT NULL
count(*)