MySQL在子查询上运行缓慢

时间:2015-04-02 04:50:31

标签: mysql optimization

以下查询需要1-2秒进行查询。

SELECT updated, COUNT( * ) count
FROM v2_subscription
WHERE ss_id IN (SELECT MAX(ss_id) ss_id FROM v2_subscription GROUP BY uid, card_id)

虽然子查询只需要几毫秒。

SELECT MAX(ss_id) ss_id FROM v2_subscription GROUP BY uid, card_id

我确实有uidcard_id以及uid, card_id

的索引

这是我的sql,我不知道如何优化它。

请指教,

2 个答案:

答案 0 :(得分:0)

试试这个,如果确实如此,可能会有所帮助,让我知道。

SELECT a.updated, COUNT( * ) count
FROM v2_subscription a 
inner join v2_subscription b 
on a.ss_id = max(b.ss_id)
GROUP BY b.uid, b.card_id

或许这个

SELECT a.updated, COUNT( * ) count
    FROM v2_subscription a 
    inner join v2_subscription b 
    on a.ss_id = (SELECT MAX(b.ss_id) b.ss_id FROM v2_subscription b GROUP BY b.uid, b.card_id)

答案 1 :(得分:0)

最后我找到了@arkumar旁边的解决方案。 添加" ORDER BY ss_id"在子查询中也可以做到这一点 由于没有order by,子查询的结果没有索引。