TarunShrivastav Ответов: 1

Выберите данные из таблицы по частям, выполните поиск и вставьте их в другую таблицу


этот вопрос приходит мне на ум, связанный с настройкой производительности, которая
Что является лучшим способом написания СП, чтобы производительность мудрая чтобы получить данные в виде фрагментов из таблицы, выполните поиск и вставку в другую таблицу.
повторяйте этот процесс до тех пор, пока основная таблица не будет пройдена полностью.

Что я уже пробовал:

Я знаю, что мы можем использовать
временная таблица,
временные переменные или представления в SP для достижения этой цели, но что было бы лучшим способом.

CHill60

"Лучший" путь зависит от многих вещей, и вы не предоставили достаточно информации для нас, чтобы помочь. Я сомневаюсь, что обход таблицы таким образом улучшит производительность такой деятельности, и я не понимаю, почему вы вставляете данные, которые у вас уже есть, в другую таблицу.
Отредактируйте свой вопрос, чтобы дать нам лучшее представление о том, чего вы пытаетесь достичь, и покажите нам код, который, по вашему мнению, можно было бы улучшить.

ZurdoDev

Возможно, SSIS, но вы не сказали достаточно, чтобы знать наверняка.

1 Ответов

Рейтинг:
5

Jörgen Andersson

Один из самых простых способов перемещения данных между таблицами в виде кусков-это:

DECLARE @CHUNK_SIZE int = 10000;
DECLARE @RC int = @CHUNK_SIZE;

WHILE @RC >0
BEGIN
    INSERT INTO TargetTable (Mycolumns)
    SELECT  TOP @CHUNK_SIZE Mycolumns
    FROM    SourceTable
    WHERE   Conditions
    ;
    SET @RC = @@ROWCOUNT
    ;
END
Где условия должны исключать уже обработанные строки.
Производительность в основном зависит от этих условий (и индексов).
Вы можете например использовать NOT EXISTS, или используйте упорядоченный запрос и установите переменную = Max(ID) из предложения output, или вы можете удалить обработанные строки из Sourcetable.
Но, как вам уже сказали, у нас недостаточно информации, чтобы сказать вам лучший способ.


CPallini

5.

Richard Deeming

Вероятно, стоит отметить, что, если "условия" не найдут способ исключить уже обработанные строки или вы не удалите уже обработанные строки, вы в конечном итоге будете обрабатывать один и тот же кусок строк снова и снова. :)

Jörgen Andersson

Я думал, что да: "но производительность в основном зависит от условий (и индексов), которые вы используете, чтобы определить, какие строки уже были скопированы между таблицами."

Richard Deeming

Д'О!

Ладно, может быть, стоит сделать это немного более очевидным для старых пердунов вроде меня, которым нужно больше кофе! :Д

Jörgen Andersson

Есть люди, для которых кофе недостаточно. :)