CTE выбрать в кусках? - PullRequest
       1

CTE выбрать в кусках?

1 голос
/ 07 декабря 2010

Я хотел бы использовать SQL Server 2008 (рекурсивный?) CTE для выбора 1 миллиона строк за один раз из 400 миллионов таблиц строк.Результаты будут записаны в текстовый файл, который я получаю, но не чанкирующую часть CTE.

Таблица имеет хорошие индексы покрытия для столбца DateTime, но без PK.

У кого-нибудь естькакие-либо предложения?

Спасибо.

1 Ответ

2 голосов
/ 08 декабря 2010

Вы можете создать psuedo PK с помощью оконной функции ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY <column>) as PK_Key, но это будет неоптимальным, поскольку для каждого выбора будет упорядочена вся таблица.

Лучший способ сделать это состоит в том, чтобы разделить ваш оператор по индексам, которые у вас есть, а не по ровно 1 миллионам строк. То есть, изучите некоторые из ваших данных и выберите произвольный предел, который достигает того, что вы хотите. Если у вас примерно 1 миллион строк в месяц, то для каждой операции поиска данных получите данные за месяцы. Вам даже не понадобится CTE для этого, так как по звукам вы не имеете дело с рекурсивными структурами данных.

...