Шаг 1: Загрузка данных через «массовую вставку» из файла .txt (с разделителями) в таблицу 1 (без индексов и т. Д.)
bulk insert Table_1
from '\\path\to_some_file.txt'
with ( tablock, FORMATFILE ='format_file_path.xml')
Через файл формата я сопоставляю выходные данные типов столбцов, чтобы избежать дальнейшегопреобразования (например, из Char в Int)
Шаг 2: ВЫВОД результата (возможно, НЕ все столбцы из таблицы 1) в другую таблицу 2, но только значения DISTINCT из таблицы 1.
NB!Таблица_1 - это примерно 20 миллионов записей (на нагрузку).
то, что мы имеем сейчас (пример упрощен):
select distinct convert(int, col1), convert(int, col2), col3, ...
into Table_2
from Table_1
Требуется около3,5 минуты для обработки.Не могли бы вы порекомендовать некоторые передовые методы, которые могут помочь сократить время обработки и поместить в таблицу только UNIQUE записи?
Заранее спасибо!
UPD 1 : извините за недоразумение - я имел в виду, что выберите отдельный запрос занимает 3,5 минуты.«массовая вставка» довольно оптимизирована - она загружается через 8 потоков (8 отдельных файлов .txt), «массовая вставка» в 1 таблицу с помощью (TABLOCK) и импортирует 20 миллионов записей за 1 мин.
UPD 2: Я тестировал разные подходы (не тестировал на SSIS - в нашем приложении этот подход не сработает): лучший результат - это подход, когда данные "массово вставлены" в формат TABLE_2 (типы столбцов совпадают, типы данных)- также) поэтому мы исключаем тип данных Converts.И просто «простой» отчетливый:
select distinct * into Table_2 from Table_1
Дает 70 секунд обработки.Так что я мог бы подумать, что это лучший результат, который я мог получить на данный момент.Я также попробовал несколько приемов (дополнительный порядок, группировка побед CTE и т. Д.) - они были хуже, чем «простые» отчетливые.
Спасибо всем за участие!