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

Какая оптимальная замена 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

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

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

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