que je faisais ceci:Pourquoi MySQL n'utilise-t-il pas l'index pour cette sous-requête?
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
qui me donnerait un tableau de layerID de, et puis je boucle et le faire pour chacun:
SELECT DATA
FROM drawings
WHERE layerID = ?
Et tout cela a bien fonctionné. Alors maintenant, je suis en train de le faire en une seule étape, donc j'essayer:
SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
)
Mais pour une raison quelconque, il ne pas utiliser l'index, pour la requête principale, SELECT DATA etc
! Donc, cette requête combinée prend beaucoup plus de temps à compléter, par rapport aux requêtes séparées que je faisais auparavant. (Par ailleurs, la sous-requête SELECT layerID etc
utilise toujours l'index).
J'ai déterminé s'il utilisait une requête ou non en utilisant l'instruction 'EXPLAIN'.
J'ai des indices individuels sur les colonnes ownerID
et collectionID
dans le tableau layers
, et sur la colonne layerID
dans le tableau drawings
.
Qu'est-ce que je fais de mal avec ma requête?
Cela l'a fait, merci. Je vais essayer d'éviter d'utiliser des sous-requêtes, et au lieu de pratiquer plus avec des jointures. C'est juste que les sous-requêtes sont plus faciles à comprendre au début. – davr