Я использую этот запрос, чтобы получить всех сотрудников {клиентов с именем, начинающимся со строчной буквы "a"}:
SELECT * FROM employees
WHERE client_id IN (SELECT id FROM clients WHERE name LIKE 'a%')
Столбец employees.client_id
- это int, с INDEX client_id (index_id)
. Подзапрос должен ИМХО возвращать список идентификаторов, который затем используется в предложении WHERE.
Когда я EXPLAIN
запрос, основной запрос не использует индексы (type:ALL
). Но когда я EXPLAIN
список, взятый из подзапроса (например, SELECT ... WHERE client_id IN (121,184,501)
), EXPLAIN
переключается на type:range
, и этот запрос выполняется быстрее на 50%.
Как я могу заставить запрос использовать индекс для данных, возвращаемых подзапросом, или есть более эффективный способ получения этих данных? (Получение списка идентификаторов на сервер приложений, присоединение к нему и отправка второго запроса здесь еще дороже).
Заранее спасибо.