Максимально возможные значения в запросе WHERE IN - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть таблица с более чем 3000000 записей, и мне нужно удалить 500000 из них с заданными идентификаторами.Моя идея состоит в том, чтобы создать запрос типа:

DELETE FROM TableName WHERE ID IN (id1, id2, ...........)

, который я генерирую с помощью простого кода C #.Вопрос заключается в следующем: есть ли ограничение на количество значений, которые я могу установить в массиве идентификаторов?

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

В конце мое решение, которое работает не так плохо: 1. Сортировать идентификаторы (чтобы сохранить пейджинг на сервере) 2. Создано с использованием кода C # с 500 идентификаторами в них. 3. отправил запрос по одному.

Я предполагаю, что когда я работал с запросом, имеющим более 1000 идентификаторов, время сервера SQL для обработки запроса замедляло меня (после того, как любой запрос, запущенный на сервере SQL, обрабатывается и оптимизируется).

Надеюсь, это поможет кому-то

1 голос
/ 23 апреля 2011

Если ваши идентификаторы не могут быть определены каким-либо сравнением (как в WHERE ID < 1000000), вы можете

  1. INSERT превратить их во временную таблицу с несколькими вставками, а затем
  2. JOIN эта временная таблица для вашей

Но вставки могут стать проблематичными.Вы должны это проверить.Как вы могли бы ускорить эту вещь?

  1. делает удаления несколькими партиями
  2. вставляет идентификаторы в временную таблицу большими партиями
...