以下のクエリには "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