私は現在、2つのテーブルからメトリクスデータを選択するクエリを取得していますが、1つは所有プロジェクト、もう1つはユーザーはアクセス権を持っています)。MySQL - 左結合を避けるリレーショナルデータを選択する最速の方法
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秒の時間がかかります。これは明らかにマルチ左結合シナリオです。しかし、私は速度を改善するためにいくつかのアイデアを持っており、考えが原則どんなものかと思っていました。 Do-I: -
- クエリでリストを選択してから、結合を実行するのではなく、データを取得してください。これがどのように機能するかはわかりません。
- 別のクエリでselectを実行してprojectIDを取得し、その後、各projectIDでクエリを実行します。これにより、何百という潜在的に何千ものリクエストが発生する可能性がありますが、処理にはより良いかもしれませんか?
- 他のアイデア?
試してみてください!また、索引を試して、あなたが説明計画から得たものを見てください。 – halfer
ええと、ちょっとここの経験に基づいてより広範なアドバイスを探しています。私はもちろんインデックスを持っています。 – waxical
OKですが、あなたが説明プランを作成してここに結果を投稿すると、mysqlの専門家(私ではありません:-)は、調整が必要なものをより良く知ることができます。 – halfer