私は、複雑なクエリのインデックスをどのように構造化するかについて基本的な理解がないと思います。以下のクエリを考えると、テーブルPHOTOS
の最適なインデックスは何ですか?私は、これは私にUsing index condition; Using temporary; Using filesort
を与える現時点で私が持っている指標であり、このマルチジョインのマルチ条件クエリに対して作成する必要があるインデックスを作成するにはどうすればよいですか?
SELECT
SQL_CALC_FOUND_ROWS
PH.photoID
FROM PHOTOS PH
JOIN PHOTO_TYPES PT ON PT.photoTypeID = PH.photoTypeID
LEFT JOIN PHOTO_LINKS PL ON PL.photoID = PH.photoID
LEFT JOIN PAYPAL_ITEMS PI ON PI.photoID = PH.photoID
LEFT JOIN PHOTOGRAPHER_PRODUCTS PP ON PP.photographerID = PH.photographerID
WHERE PH.shootID = 1234
GROUP BY PH.photoID
ORDER BY PH.timeAdded DESC
LIMIT 0, 100;
はEXPLAIN出力:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE PH ref PRIMARY,testIndex testIndex 4 const 80632 100 Using index condition; Using temporary; Using filesort
1 SIMPLE PT eq_ref PRIMARY PRIMARY 1 PH.photoTypeID 1 100 Using index
1 SIMPLE PL ref photoID photoID 4 PH.photoID 1 100 Using index
1 SIMPLE PCI ref photoID photoID 5 PH.photoID,const 1 100 Using index
1 SIMPLE PP ref photographerID photographerID 4 PH.photographerID 4 100 Using where; Using index
testIndex: photoTypeID, photoID, photographerID, shootID, timeAdded
そしてここでは、クエリは、(それが現実ではもっと複雑だが、私は最低限の関連PHOTOS
-index関連のものにそれをストリップダウンしましたです
インデックス/クエリをそのまま使用していることは間違いありませんか?あなたが定義した方法でtestIndexがPHテーブルで使用されることを消化するのは難しいようです。 – e4c5
うん、ちょうど確認して確認! – Codemonkey
pretty同じtestIndexがshootIdで始まらず、説明に 'const' – e4c5