Понимание, почему этот внешний выбор MySQL замедляет запрос

У меня есть таблица Companies и таблица Zipcodes, и я хочу получить самое маленькое подмножество идентификаторов companyID, прежде чем применять дополнительную обработку. Так часто я помещаю это во внутренний выбор, собирая идентификаторы компании в некотором условии WHERE, а затем выполняю агрегацию или вычисление (например, вычисление расстояния) снаружи.

По какой-то причине я не понимаю, почему этот внешний SELECT работает медленно, а внутренний запрос работает быстро.

Я знаю, что это связано с JOIN внутри. Потому что удаление это решает проблему. Каким-то образом MySQL выводит таблицы …

SELECT _i1.companyID FROM (
SELECT companyID
FROM Companies
JOIN Zipcodes ON Zipcodes.zipcode = Companies.companyZipcode
WHERE Companies.companyType = 'plumbing'
) _i1

Время: .8с
Без внешнего запроса: .00x секунд

Есть индексы на Zipcodes.zipcode а также Companies.companyZipcode а также Companies.companyType а также Companies.companyID это первичный ключ

Выполнение EXPLAIN показывает, что внешний запрос приводит к тому, что MySQL имеет тип select_type Derived вместо Simple.

2

Решение

Если у вас есть подзапросы, необходимо создать временную таблицу и вставить в нее данные.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]