簡體   English   中英

使用內部聯接優化MySQL查詢

[英]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;

創建索引:

  1. create index vcvid on vc (vid)
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM