2017-09-01 8 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 
関連する問題