Задать вопрос

Какая оптимальная замена WHERE IN?

Дано:
--
1) Таблица контактов, около 100К, с полями userid, id
userid - пользователь к которому принадлежит запись. id - то что нужно узнать.
2) Массив userid полученных из вне.

Проблема:
--
Если задано около 30К userid я использую выборку как:
select id from contacts where userid in (...)

на небольших выборках все нормально.
на 30К+ все клинит.

Мое решение:
--
1) Создается create temporary table _temp (id int, primary (`id`)
2) заполняется данными тех userid которые нужны (30к)
3) выборка делается как: select c.id from _temp t1 left join contacts c on t1.id=c.userid ...

С таким решением первые тесты показали себя очень хорошо, Локально пробовал на одной выборке . Время старого варианта 0.4, нового 0.01-0.02

Вопрос:
насколько оптимально данное решение.
Есть ли какие варианты получше?
  • Вопрос задан
  • 307 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Не так давно столкнулся с подобной задачей и пришел к такому же решению - создание временной таблицы, загрузка в нее данных через LOAD DATA INFILE, выполнение нужного запроса. Кстати, так же делаю, когда необходимо обновить большое кол-во строк (1К+) в какой-то таблице данными извне.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы