Экспортировать ПРОЦЕДУРЫ, ФУНКЦИИ & amp; TRIGGER тоже добавьте параметр --routines
:
mysqldump -u YourUser -p YourDatabaseName --routines > wantedsqlfile.sql
Используйте класс SqlBulkCopy , он будет в состоянии пробежать те 100K строки намного быстрее, чем человек вставляет.
, О, и если бы Вы можете, я убедил бы Вас реализовать IDataReader способный класс, питаться SqlBulkCopy. WriteToServer (IDataReader) метод, это позволит Вам производить данные последовательно, одна строка за один раз. Если Вы импортируете из текстового файла, как пример, создавая [приблизительно 110] методы, который использует yield return
и преобразование его к , то объект IDataReader позволит Вам подавать данные к серверу очень естественно.
Для отвечания на потерю способности к откату с BCP можно передать данные во временную таблицу, и затем выполниться нормальный INSERT INTO
операторы на сервере впоследствии, передача объема данные из временной таблицы в производственную таблицу, это позволит Вам использовать транзакцию для последней части передачи и будет все еще работать намного быстрее, чем Ваши исходные отдельные операторы вставки.
РЕДАКТИРОВАНИЕ: и Вот пример (C#, но должно быть легко преобразовать в VB.Net) использования объемного API загрузки.
Благодаря общей справке я смог выполнить свою задачу. SQLBulkCopy соответствуют моим потребностям отлично (хотя были некоторые другие превосходные предложения). Используя SqlBulkcopy, время прошло от 11 минут до 45 секунд. Я не могу верить различию!
Для дальнейшего использования, вот несколько битов информации:
код Базового внедрения:
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
Благодаря всем для справки! Я искренне ценю его.
Поместите свои данные, которые будут импортированы в файл CSV и выполнят утилиту bcp на данных. Вы не можете добраться немного быстрее с последовательными вызовами, вставляющими единственные строки за один раз, Вам, конечно, нужна объемная утилита, если Вы хотите производительность.
класс SQLBulkCopy позволит Вам передавать все данные в наборе, таким образом, сервер сможет обработать все сразу, устраняя назад и вперед. Таким образом, если Вы не хотите создавать временные файлы (который я был бы), затем смотреть на тот класс.
Просто наличие соединения остается открытым, хорошее начало, но у Вас все еще есть издержки отправки строки, имение SQL хранит его, возвращает результат, и затем необходимо выполнить итерации к следующей строке.
вот некоторые сравнения скорости различных методов текстовых файлов импорта в SQL-сервер: http://weblogs.sqlteam.com/mladenp/archive/2006/07/22/10742.aspx
надежда это помогает.
Существует также сохраненный proc (названный Объемной Вставкой), который добьется цели для Вас.. Это использует BCP под покрытиями.
выезд эта ссылка для наблюдения синтаксиса
Это зависит, как класс массового копирования реализован. Но существует инструмент командной строки, включенный с установками SQL Server, который делает точно это (это - вероятно, то же). Это называют "BCP". Я использую его прямо сейчас, и это должно быть в состоянии штурмовать через 100k строки за несколько секунд.
документация MSDN называет его утилитой "группового импорта".