現在、2つのテーブルからメトリックデータを選択するクエリがありますが、プロジェクトは他の2つのテーブルからクエリを実行します(1つは所有プロジェクト、もう1つはユーザーがアクセスできるプロジェクトです)。
SELECT v.`projectID`,
(SELECT COUNT(m.`session`)
FROM `metricData` m
WHERE m.`projectID` = v.`projectID`) AS `sessions`,
(SELECT COUNT(pb.`interact`)
FROM `interactionData` pb WHERE pb.`projectID` = v.`projectID` GROUP BY pb.`projectID`) AS `interactions`
FROM `medias` v
LEFT JOIN `projectsExt` pa ON v.`projectsExtID` = pa.`projectsExtID`
WHERE (pa.`user` = '1' OR v.`ownerUser` = '1')
GROUP BY v.`projectID`
時間がかかりすぎて1〜2秒かかります。これは明らかにマルチ左結合シナリオです。しかし、私は速度を向上させるためのいくつかのアイデアを持っており、その考えは原則として何であるか疑問に思いました。私は:-
- 結合を行うのではなく、クエリでリストを選択してからデータを取得してみてください。これがどのように機能するかわからない。
- 別のクエリでselectを実行してprojectIDを取得し、その後、各projectIDに対してクエリを実行します。これにより、数百、場合によっては数千のリクエストが発生する可能性がありますが、処理には適している可能性がありますか?
- 他のアイデア?