Раньше я делал это:
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
Что даст мне массив layerID's, а затем я зациклюсь и сделаю это для каждого из них:
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
! Таким образом, этот один комбинированный запрос выполняется намного дольше по сравнению с отдельными запросами, которые я делал ранее. (Кстати, подзапрос, SELECT layerID etc
все еще использует индекс).
Я определил, использует ли он запрос или нет, используя оператор EXPLAIN.
У меня есть отдельные индексы для столбцов ownerID
и collectionID
в таблице layers
и для столбца layerID
в таблице drawings
.
Что я делаю не так с моим запросом?