Равномерное пакетирование с повторяющимися значениями для таблицы CCI

#sql #sql-server

Вопрос:

У меня есть таблица с 58 миллионами записей. Я хочу скопировать отсортированные(по дате) данные во вторую таблицу(с индексом CCI). Вставка должна быть в едином пакете размером 1 м записей (это делается для того, чтобы избежать обрезки объемной загрузки для CCI).

псевдокод для выбора пакетной записи:

 SELECT TOP (@batchsize) WITH TIES FROM original_table
WHERE original_table.dateKey BETWEEN @start_dateKey AND @end_dateKey
 

дата начала обновления

 SELECT  @start_dateKey =  MAX(dateKey)
                            FROM 
                            (
                            SELECT TOP (batchsize) FROM original_table WHERE original_table.date 
                            BETWEEN @start_dateKey AND @end_dateKey
                            )
@start_dateKey = @start_dateKey   1
 
  1. Я использую WITH TIES, чтобы получить все записи для заданного диапазона дат
    , который может быть не точным 1 м. В случае, если я удалю «С ПРИВЯЗКАМИ», я, возможно, не
    смогу получить повторяющиеся значения для данного диапазона дат, и я могу пропустить значения, как только увеличу start_date. У меня действительно есть
    уникальный идентификатор, но он упорядочивается случайным образом, как только мы сортируем по
    дате, и может не помочь разорвать СВЯЗИ.
  2. ROW_NUMBER может помочь, но мне интересно, может ли это привести к несоответствию данных, поскольку номер строки изменяется при вставке данных.

Есть ли что-нибудь еще, что могло бы помочь?

Примечание : значение даты int будет выглядеть примерно как 20201020 (2020-10-20)

Комментарии:

1. Я попросил перенести это в dba.se — в будущем задавайте вопрос только на одном сайте.