SELECT PROJECTKEY, CONCAT(FIRSTNAME,' ',LASTNAME) as USRCREATED,
CONCAT('/userImages/',md.USERKEY,'/',md.IMAGE) as USRCREATED_PROFILE_IMG,mm.DTCREATED
FROM kbedumoment mm
left join users md on mm.USRCREATED=md.USERKEY
where mm.id in
(
SELECT mm.id from kbedumoment mm
left join kbedumomentpostto pt on pt.MOMENT_ID=mm.id
where mm.deleted_at is NULL
&& pt.childkey=1005
union all
SELECT id from kbedumoment mm
where POST_TO='school' && mm.deleted_at is NULL && mm.PROJECTKEY =2
)
order by mm.id desc
La requête ci-dessus prend 6,875 sec, ce qui prend trop de temps.Lorsque la sous-requête prend trop de temps, vous devez choisir
J'ai essayé d'exécuter la sous-requête seul.
SELECT mm.id from kbedumoment mm
left join kbedumomentpostto pt on pt.MOMENT_ID=mm.id
where mm.deleted_at is NULL
&& pt.childkey=1005
union
SELECT id from kbedumoment mm
where POST_TO='school' && mm.deleted_at is NULL && mm.PROJECTKEY =2
Résultat:
+-------+
| id |
+-------+
| 253 |
| 1264 |
| 1 |
| 238 |
+-------+
Durée: 0,109 sec. Donc, la sous-requête est bien.
Ensuite, j'effectue ce qui suit pour les tests, remplacez la sous-requête par les identifiants que je connais déjà.
SELECT PROJECTKEY, CONCAT(FIRSTNAME,' ',LASTNAME) as USRCREATED,
CONCAT('/userImages/',md.USERKEY,'/',md.IMAGE) as USRCREATED_PROFILE_IMG,mm.DTCREATED
FROM kbedumoment mm
left join users md on mm.USRCREATED=md.USERKEY
where mm.id in
(
1264,253,238,1
)
order by mm.id desc
Pourquoi est-ce qui se passe?
Pour quelque chose comme ceci où l'explication évidente échoue, vous devriez essayer d'exécuter 'EXPLAIN' sur votre requête. Peut-être que MySQL a une étape qui pourrait expliquer le comportement. –
Publication postée avec EXPLAIN. – ethan17
Pas une réponse, mais pour une raison quelconque, MySQL utilise une analyse de plage dans votre dernière requête, mais un balayage d'index dans la requête réelle d'intérêt. La plage devrait surperformer l'indice, ce qui pourrait expliquer les chiffres. Mais je ne sais pas comment réparer ça. Vous pourriez vouloir vous inquiéter à ce sujet lorsque vous avez des tables beaucoup plus grandes. Vos attentes peuvent se jouer avec des ensembles de données plus volumineux. –