Как я могу получить пакет за раз всех строк в таблице SQL? - PullRequest
2 голосов
/ 03 апреля 2009

У меня есть таблица с 40 миллионами строк.
Я хочу собрать около 2 миллионов за раз и «обработать» их.
Почему?
Обработка при обработке более 10 миллионов строк ухудшает производительность, а зачастую и время ожидания. (Мне нужно, чтобы это работало независимо от размера данных, поэтому я не могу просто увеличивать ограничение по времени.)
Кроме того, я использую SQL Server.

1 Ответ

1 голос
/ 03 апреля 2009

Существует ли увеличивающийся ключ, такой как идентификационный ключ? И это кластерный индекс? Если это так, должно быть достаточно просто отследить последний ключ, который вы получили, и сделать что-то вроде:

SELECT TOP 1000000 *
FROM [MyTable]
WHERE [Id] > @LastId
ORDER BY [Id]

Также - обязательно прочитайте что-нибудь вроде ExecuteReader, чтобы не буферизовать слишком много строк.

Конечно, за пределами нескольких тысяч строк вы также можете просто принять случайное обратное путешествие и сделать несколько запросов, скажем, по 10000 строк за раз. Я не думаю, что это было бы менее эффективно в реальном выражении (несколько миллисекунд тут и там).

...