我有一个存储“主题”的数据库,每个主题都与一大堆图像相关联(=这些主题的屏幕截图)。现在我想显示最新的 10 个主题,对于每个主题,我只想从数据库中获取一张图片(ID 最低的一张)。
目前我的查询看起来像这样(我正在使用子查询):
SELECT DISTINCT
t.theme_id, t.theme_name, theme_date_last_modification, image_id, image_type
FROM
themes t, theme_images i
WHERE
i.theme_id = t.theme_id
AND t.theme_status = 3
AND t.theme_date_added < now( )
AND i.image_id = (
SELECT MIN( image_id )
FROM theme_images ii
WHERE ii.theme_id = t.theme_id
)
GROUP BY
t.theme_id
ORDER BY
t.theme_date_last_modification DESC
LIMIT 10
它可以工作,但是查询很慢。当我使用 EXPLAIN 时,我可以看到有一个“依赖子查询”。是否可以将此依赖子查询转换为某种可以由mysql更快处理的连接?
PS:我的实际查询要复杂得多,并且使用了更多的表。我已经尝试尽可能简化它,以便您可以专注于性能问题的实际原因。
编辑:这是解释的输出:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t index PRIMARY,themes themes 212 NULL 5846 Using where; Using index; Using temporary; Using filesort
1 PRIMARY i eq_ref PRIMARY,theme_id,image_id PRIMARY 4 func 1 Using where
2 DEPENDENT SUBQUERY ii ref theme_id theme_id 4 themes.t.theme_id 6