我正在研究運行速度非常慢的查詢,並試圖弄清楚如何將子查詢加載到數組中或使其更快。將子查詢結果設置爲數組,需要太長時間才能運行
SELECT COUNT(bdgid)
FROM member_badges
WHERE usid in(
SELECT usid
FROM member_badges
WHERE bdgid in (1,4,5,6,7,8)
GROUP BY usid
HAVING COUNT(usid) =6)
GROUP BY bdgid
子查詢retuns USID的的一組特定的列表,以及主查詢計算包含這些用戶ID之一bdgid的。但是這個例子運行時間太長。
mbrbdid usid bdgid
------------------------------
1 14 1
2 11 4
3 25 4
4 11 7
5 11 8
6 22 1
該表有30多萬條記錄。基本上每個人都可以獲得任何徽章1-10次。這個表格是每次用戶獲得徽章時的一個實例。 因此,我試圖讓所有有獎徽章(1,4,5,6,7,8)的USID,然後做每個徽章1-10的計數,但只使用這些特定ID的
你試過'EXPLAIN SELECT COUNT(bdgid).....' – Milen 2014-09-30 20:37:50
你確定你不想'COUNT(DISTINCT bdgid)'和'COUNT(DISTINCT USID)'?除非在兩種情況下都有實際寫入'COUNT(*)'的空值。 – Arth 2014-09-30 20:41:32
準確地分解你想要的單詞,然後它會更容易幫助。這是一個令人難以置信的混淆查詢。 – Arth 2014-09-30 20:49:16