Массовая вставка в SQL-сервер

Экспортировать ПРОЦЕДУРЫ, ФУНКЦИИ & amp; TRIGGER тоже добавьте параметр --routines:

mysqldump -u YourUser -p YourDatabaseName --routines > wantedsqlfile.sql

16
задан Nathan 2 December 2008 в 18:17
поделиться

6 ответов

Используйте класс SqlBulkCopy , он будет в состоянии пробежать те 100K строки намного быстрее, чем человек вставляет.

, О, и если бы Вы можете, я убедил бы Вас реализовать IDataReader способный класс, питаться SqlBulkCopy. WriteToServer (IDataReader) метод, это позволит Вам производить данные последовательно, одна строка за один раз. Если Вы импортируете из текстового файла, как пример, создавая [приблизительно 110] методы, который использует yield return и преобразование его к , то объект IDataReader позволит Вам подавать данные к серверу очень естественно.

Для отвечания на потерю способности к откату с BCP можно передать данные во временную таблицу, и затем выполниться нормальный INSERT INTO операторы на сервере впоследствии, передача объема данные из временной таблицы в производственную таблицу, это позволит Вам использовать транзакцию для последней части передачи и будет все еще работать намного быстрее, чем Ваши исходные отдельные операторы вставки.

РЕДАКТИРОВАНИЕ: и Вот пример (C#, но должно быть легко преобразовать в VB.Net) использования объемного API загрузки.

20
ответ дан 30 November 2019 в 16:42
поделиться

Благодаря общей справке я смог выполнить свою задачу. SQLBulkCopy соответствуют моим потребностям отлично (хотя были некоторые другие превосходные предложения). Используя SqlBulkcopy, время прошло от 11 минут до 45 секунд. Я не могу верить различию!

Для дальнейшего использования, вот несколько битов информации:

  • Для использования Массового копирования SQL данные должны быть в форме DataSet, DataReader или DataTable. Некоторый XML позволяется также.

код Базового внедрения:

    Public Sub PerformBulkCopy(ByVal dt As DataTable)

    Using Conn As SqlConnection = New SqlConnection(DBHelper.DatabaseConnection)
        Conn.Open()

        Using s As SqlBulkCopy = New SqlBulkCopy(Conn)

            s.DestinationTableName = "TableName"
            s.WriteToServer(dt)
            s.Close()

        End Using

        Conn.Close()
    End Using
End Sub

Очень информативная ссылка, которую я нашел:

Используя Массовое копирование Sql

Благодаря всем для справки! Я искренне ценю его.

12
ответ дан 30 November 2019 в 16:42
поделиться

Поместите свои данные, которые будут импортированы в файл CSV и выполнят утилиту bcp на данных. Вы не можете добраться немного быстрее с последовательными вызовами, вставляющими единственные строки за один раз, Вам, конечно, нужна объемная утилита, если Вы хотите производительность.

класс SQLBulkCopy позволит Вам передавать все данные в наборе, таким образом, сервер сможет обработать все сразу, устраняя назад и вперед. Таким образом, если Вы не хотите создавать временные файлы (который я был бы), затем смотреть на тот класс.

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

2
ответ дан 30 November 2019 в 16:42
поделиться

вот некоторые сравнения скорости различных методов текстовых файлов импорта в SQL-сервер: http://weblogs.sqlteam.com/mladenp/archive/2006/07/22/10742.aspx

надежда это помогает.

2
ответ дан 30 November 2019 в 16:42
поделиться

Существует также сохраненный proc (названный Объемной Вставкой), который добьется цели для Вас.. Это использует BCP под покрытиями.

выезд эта ссылка для наблюдения синтаксиса

текст ссылки

1
ответ дан 30 November 2019 в 16:42
поделиться

Это зависит, как класс массового копирования реализован. Но существует инструмент командной строки, включенный с установками SQL Server, который делает точно это (это - вероятно, то же). Это называют "BCP". Я использую его прямо сейчас, и это должно быть в состоянии штурмовать через 100k строки за несколько секунд.

документация MSDN называет его утилитой "группового импорта".

0
ответ дан 30 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: