OK, je ne peux pas trouver quel index je devrais avoir sur "TBL_PHOTOS" pour que cette requête s'exécute rapidement. Prend actuellement environ 0,8 secondes avec 50 000 lignes en PH, 50 000 en PL, 300 en R1 et 100 en R2.Impossible de déterminer l'index dont j'ai besoin pour cette requête mysql - merci de nous aider?
Si je supprime la clause ORDER BY, la requête est rapide, prenant < 0,05 secondes.
Voici MySQL par la voie:
SELECT PH.tTaken, PH.nPhotoPK, PH.sFilename
FROM TBL_PHOTOS PH
LEFT JOIN TBL_PHOTO_LINKS PL ON PH.nPhotoPK = PL.nPhotoFK
LEFT JOIN TBL_RACES1 R1 ON R1.nRacePK = PH.nRace1FK
LEFT JOIN TBL_RACES2 R2 ON R2.nRacePK = PH.nRace2FK
WHERE PL.nPhotoLinkPK IS NULL
ORDER BY PH.tAdded DESC
LIMIT 0,100
L'intention est de retirer les 100 photos mises en ligne récemment qui n'ont pas encore été liés à quoi que ce soit. TBL_RACES1 & TBL_RACES2 sont deux tables séparées pour une bonne raison, donc je ne peux pas changer ça. Une photo appartiendra toujours à une entité de R1 ou R2, jamais les deux.
Excuses si c'est un mauvais SQL pour une raison quelconque, ce n'est pas mon point fort. Je ne suis même pas sûr de l'information dont vous aurez besoin pour m'aider, alors si j'ai laissé quelque chose de vital, il suffit de demander.
J'ai quelques indices fixés sur la table déjà, mais dans une déclaration expliquer je reçois
possible_keys: (Null)
key: (null)
ref: (null)
Merci!
Merci, changeant à: SELECT Q.tTaken, Q.nPhotoPK, Q.sFilename DE (SELECT PH.tTaken, PH.nPhotoPK, PH.sFilename, PH.nRace1FK, PH.nRace2FK \t DE TBL_PHOTOS PH \t \t LEFT JOIN TBL_PHOTO_LINKS PL ON PH.nPhotoPK = PL.nPhotoFK \t OÙ PL.nPhotoLinkPK IS NULL \t \t ORDER BY DESC PH.nPhotoPK \t LIMIT 0,60) Q LEFT JOIN TBL_RACES R1 ON R1.nRacePK = Q.nRace1FK GAUCHE JOINDRE TBL_RACES R2 SUR R2.nRacePK = Q.nRace2FK semble avoir fait l'affaire. Est-ce le genre de chose que vous vouliez dire? – Codemonkey
Est-ce que je manque quelque chose ici, ne peut pas comprendre comment coller/code de format \t dans \t cette case \t commentaires! – Codemonkey
OK, cela n'a pas fonctionné entièrement, car j'avais allégé la question que je posais. Le plus gros problème était que j'avais "ORDER BY col1 ASC, col2 DESC". Je sais maintenant que MySQL * ne peut pas faire face à de telles choses, et j'ai dû créer une colonne "inverse" pour le contourner. Ordures! – Codemonkey