Есть ли более быстрый запрос для этого mysql запроса? - PullRequest
0 голосов
/ 08 марта 2020

Я работаю с mysql дб. В конкретной таблице есть два столбца (column1 и column2) и 10000000+ строк. Я хочу получить все записи, где column1 является одним из списка 50000 нет. Я использую этот запрос в настоящее время:

Select * from db.table where column1 in (list of 50000 no.s)

Есть ли более быстрый запрос, чем этот?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Я не могу говорить о MySQL - только SQL Сервер - но может применяться тот же принцип.

На SQL Сервер IN имеет серьезную проблему отсутствия статистики. Это означает, что при использовании нетривиального числа план запроса представляет собой сканирование таблицы.

Лучше создать временную таблицу и загрузить идентификаторы (И вставить в нее уникальный индекс, который выдает статистику) и затем присоединиться к двум таблицам. Больше для работы с анализатором запросов.

0 голосов
/ 09 марта 2020
  • INDEX(column1)
  • В таблице только 2 столбца? Если нет, то не используйте SELECT *, но укажите названия столбцов.
  • Пожалуйста, укажите EXPLAIN SELECT ...
...