2017-09-01 84 views
0

在下面的查詢中有一個名爲「basket_status」的表。對於basket_status中的每條記錄,籃子中紗球的數量正在從另一個表(yarn_ball_updates)中進行計數。MySQL在連接表中匹配記錄的count()性能較差

basket_status表格有761行。 yarn_ball_updates表有1,204,294條記錄。運行下面的查詢需要大約30秒到60秒(取決於服務器的繁忙程度)並返回750行。顯然我的問題是對761個basket_status記錄中的1,204,294條記錄進行匹配。

我試圖根據查詢製作視圖,但沒有提供性能提升。我相信我閱讀過你的觀點,你不能有子查詢和複雜的聯接。

我應該採取什麼方向來加速此查詢?我從來沒有做過MySQL計劃的任務或任何東西,但似乎「basket_status」表應該有一個「yarn_ball_count」計數已經在它,並且一個自動化的過程應該更新新的額外count()列可能?

感謝您的任何幫助或方向。

SELECT p.id, p.basket_name, p.high_quality, p.yarn_ball_count 
FROM (
SELECT q.id, q.basket_name, q.high_quality, 
CAST(SUM(IF (q.report_date = mxd.mxdate,1,0)) AS CHAR) yarn_ball_count 
FROM (
SELECT bs.id, bs.basket_name, bs.high_quality,ybu.report_date 
FROM yb.basket_status bs 
JOIN yb.yarn_ball_updates ybu ON bs.basket_name = ybu.alpha_pmn 
) q, 
(SELECT MAX(ybu.report_date) mxdate FROM yb.yarn_ball_updates ybu) mxd 
GROUP BY q.basket_name, q.high_quality) p 

回答

0

我不認爲你需要這個嵌套查詢。我不是MySQL開發人員,但不會工作?

SELECT bs.id, bs.basket_name, bs.high_quality, count(*) yarn_ball_count 
FROM yb.basket_status bs 
    JOIN yb.yarn_ball_updates ybu ON bs.basket_name = ybu.alpha_pmn 
    JOIN (SELECT MAX(ybu.report_date) mxdate FROM yb.yarn_ball_updates) mxd ON ybu.report_date = mxd.mxdate 
GROUP BY bs.basket_name, bs.high_quality