以下のクエリは約0.3秒かかります。なんで?そして、どうすればそれを解決できますか。そんなに時間がかかるべきではない...
SELECT tshops.OfficialName
, tresults.StartTime
, tresults.Price
, tresults.shopID
FROM
tresults
INNER JOIN tshops
ON tshops.shopID = tresults.shopID
WHERE
tresults.pID = 15
AND tresults.websiteID = 1
AND tresults.StartTime = (SELECT max(tresults.StartTime) AS maxstarttime
FROM
tresults
WHERE
tshops.shopID = tresults.shopID
AND tresults.pID = 15
AND tresults.websiteID = 1)
ORDER BY
tresults.Price DESC
結果を説明する:
1, PRIMARY, tshops, ALL, PRIMARY, , , , 203, Using temporary; Using filesort
1, PRIMARY, tresults, eq_ref, PRIMARY,idxPID,idxWebsite,idxStartTimeASC,idxStartTimeDESC,fk_shopID, PRIMARY, 20, func,const,pricegrabber.tshops.shopID,const, 1, Using where
2, DEPENDENT SUBQUERY, tresults, ref, idxPID,idxWebsite,fk_shopID, fk_shopID, 4, pricegrabber.tshops.shopID, 891, Using where; Using index
したがって、tshopの全表スキャンが実行されます。しかし、なぜ?両方のテーブルのshopIDにインデックスがあります...