Что является самым быстрым способом импортировать записи на 60 м в SQL

У меня есть 5-6 таблицы в моей базе данных, которую я должен заполнить с данными тестирования для тестирования peroformance в моем приложении.

Я могу написать код и сделать объемную вставку, которая мой прогноз - то, что потребуется почти 3 дня для выполнения так, я предположил, что должен быть более быстрый путь.

Какие-либо идеи?

7
задан Jon 25 May 2010 в 09:05
поделиться

6 ответов

SSIS - это один из возможных вариантов, но вы либо будете использовать задачу массовой вставки, либо перебирать файл и вызывать оператор INSERT INTO. Есть BCP.

1
ответ дан 7 December 2019 в 09:57
поделиться

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

SSIS - это супер, вы можете создавать хорошие сценарии с ветвлениями и деревьями решений.

При однократном отключении скорость в обоих случаях будет одинаковой.

Вы будете шокированы тем фактом, что он может обрабатывать 60 миллионов. С помощью аккуратного пакетного файла BCP вы можете импортировать, используя sql, затем изменять, экспортировать новые данные и создавать различные наборы тестовых данных. Все заработает за секунды или минуты.

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

Удачи,

Марк Брин Ирландия BMW R80GS 1987

1
ответ дан 7 December 2019 в 09:57
поделиться

В зависимости от того, как вы генерируете данные, SSIS может быть лучшим способом вставки данных.

Также убедитесь, что вы отключили все триггеры, где это возможно, и удалили как можно больше индексов, добавив их после этого.

3
ответ дан 7 December 2019 в 09:57
поделиться

Вы можете взглянуть на инструменты redgate, у них есть один, называемый генератором данных. Это может помочь вам от необходимости писать свои собственные сценарии, и я уверен, что они каким-то образом оптимизируют это для скорости вставок.

(Отказ от ответственности, я не связан с redgate, как и программное обеспечение).

0
ответ дан 7 December 2019 в 09:57
поделиться

Используйте рекурсивные CTE для генерации и вставки огромного количества строк за раз:

with table1Test
as (
--
-- generate some test rows
--
)
insert into table1 select ... from table1Test
0
ответ дан 7 December 2019 в 09:57
поделиться

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

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

1
ответ дан 7 December 2019 в 09:57
поделиться