Я использовал для этого:Почему 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
! Таким образом, этот объединенный запрос занимает гораздо больше времени, чем завершение, по сравнению с отдельными запросами, которые я делал раньше. (Кстати, в подзапросе SELECT layerID etc
по-прежнему используется индекс).
Я определил, использует ли он запрос или нет, используя оператор «EXPLAIN».
У меня есть отдельные индексы в ownerID
и collectionID
столбцов в таблице layers
, и на layerID
колонке в drawings
таблице.
Что я делаю неправильно с моим запросом?
Это сделало это, спасибо. Я постараюсь избежать использования подзапросов и вместо этого практиковать больше с объединениями. Просто мне легче понять подзапросы. – davr 2008-11-13 21:21:19