MySQL 子查询慢
MySQL slow on subquery
以下查询需要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
我在 uid
、card_id
和 uid, card_id
上都有索引
这是我的sql,我不知道如何优化它。
请指教,
试试这个,可能会有帮助,如果有帮助请告诉我。
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)
最后我在@arkumar 上面的答案旁边找到了解决方案。
在子查询中添加 "ORDER BY ss_id" 也可以解决问题
由于没有order by,子查询的结果没有index.
以下查询需要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
我在 uid
、card_id
和 uid, card_id
这是我的sql,我不知道如何优化它。
请指教,
试试这个,可能会有帮助,如果有帮助请告诉我。
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)
最后我在@arkumar 上面的答案旁边找到了解决方案。 在子查询中添加 "ORDER BY ss_id" 也可以解决问题 由于没有order by,子查询的结果没有index.