[英]Optimizing a MySQL query with inner join
我正在嘗試在這里優化查詢,但是以某種方式仍然需要30秒鍾以上的時間才能執行。
它是這樣的:
SELECT v.cd, COUNT(vc.id) as count
FROM vc
INNER JOIN v ON v.uid = vc.vid
WHERE ct > 1393279200 AND pid="12" AND sid="10"
GROUP BY vc.vid;
我已經嘗試過使用JOIN進行多種組合,但似乎根本不打算使用JOIN。 也許建立一個子查詢會更好?
所需結果:
+--------------+--------------+
| cd | count |
+--------------+--------------+
| AE | 1 |
| AM | 1 |
| AU | 230 |
| BB | 1 |
| CA | 127 |
| CH | 1 |
| PR | 3 |
| SA | 1 |
| SE | 5 |
| SG | 12 |
| TH | 1 |
| US | 5829 |
| ZA | 3 |
+--------------+--------------+
設置36行(41.09秒)
所需結果由以下人員產生:
SELECT V.cd, COUNT(VC.id) as count
FROM vc as VC, v V
WHERE ct > 1393279200 AND pid="12" AND sid="10" AND VC.vid = V.uid
GROUP BY V.cd;
創建索引:
create index vcvid on vc (vid)
create unique index vuidcd on v (uid, cd)
注意:在where語句中使用的列也應該在索引中,通常是第一個
運行analyze v; analyze vc; optimize v; optimize vc;
analyze v; analyze vc; optimize v; optimize vc;
然后嘗試以下查詢:
select v.cd, q.cnt
from
v use index (vuidcd)
inner join
(
select vc.vid, count(*) as cnt
from vc use index (vcvid)
group by vc.vid
) as q
on (v.uid = q.vid)
如果會有問題-嘗試使用帶有查詢explain extended
來查找問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.