librown
@librown
На-все-руки-мастер и немного кодер

Если ли ограничение на длину SQL запроса (большой IN)?

Приветствую!
Есть большая таблица на 30 колонок и 5 млн строк. Необходимо пройтись по каждой строке, и совершить дополнительную обработку данных. Решил выбирать строки порциями по 100 тыс строк за раз.

Делаю в два прохода:

1. Сначала циклом выбираю по 100-300 тыс id
SELECT id FROM tbl LIMIT X, 100000

2. Вторым запросом по этим id вытягиваю остальные колонки:
SELECT * FROM tbl WHERE id IN (...)

Насколько корректно перечислять в блоке IN - 100 тысяч id? А 300 тысяч?
Есть ли ограничение на длину запроса? Как добиться максимальной скорости выполнения?

Буду признателен, если поделитесь опытом. Спасибо.
  • Вопрос задан
  • 1848 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
А в чем сакральный смысл выбирать сначала айдишники с LIMIT OFFSET, а потом делать второй запрос через IN?

Почему нормально не выбирать через лимит полные данные?
Ответ написан
@Alj
В запросе нет ORDER BY - БД не должна возвращать строки по порядку.

Достаточно
SELECT * FROM tbl ORDER BY id LIMIT X,100000
X = 0 , 100000 , 200000 , ...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы