이 하위 쿼리에 대해 인덱스를 사용하는 MySQL이 아닌 이유는 무엇입니까?
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
어느 layerID의 배열을 줄 것입니다 다음 루프 및 각 이렇게 :
SELECT DATA
FROM drawings
WHERE layerID = ?
그리고 그것은 모두 잘 작동합니다. 그래서 지금은 한 단계에서 그것을하려고, 그래서 이것을 시도 :
SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
)
하지만 어떤 이유로, 그것은 SELECT DATA etc
, 메인 쿼리에 대한 색인을 사용하지 않습니다! 따라서이 하나의 결합 된 쿼리는 이전에 수행했던 별도의 쿼리와 비교하여 완료하는 데 훨씬 더 오래 걸립니다. (byway, 서브 쿼리, SELECT layerID etc
는 여전히 인덱스를 사용합니다).
'EXPLAIN'문을 사용하여 쿼리를 사용하는지 여부를 결정했습니다.
layers
테이블의 ownerID
및 collectionID
열과 drawings
테이블의 layerID
열에 개별 인덱스가 있습니다.
쿼리에 어떤 문제가 있습니까?
감사합니다. 하위 쿼리를 사용하지 않고 대신 조인을 사용하여 연습하십시오. 처음에는 하위 쿼리가 더 쉽게 이해할 수 있습니다. – davr