SQL Server / MySQL / Access - ускорение вставки многих строк неэффективным способом - PullRequest
5 голосов
/ 07 января 2009

SETUP

Мне нужно вставить пару миллионов строк в SQL Server 2000/2005, MySQL или Access. К сожалению, у меня нет простого способа использовать массовую вставку или BCP или любой другой способ, которым нормальный человек мог бы пойти по этому поводу. Вставки будут происходить в одну конкретную базу данных, но этот код должен быть независимым от БД - поэтому я не могу делать массовое копирование, или ВЫБРАТЬ В, или BCP. Однако я могу выполнять определенные запросы до и после вставок, в зависимости от того, в какую базу данных я импортирую.

например.

If IsSqlServer() Then
    DisableTransactionLogging();
ElseIf IsMySQL() Then
    DisableMySQLIndices();
End If

... do inserts ...

If IsSqlServer() Then
    EnableTransactionLogging();
ElseIf IsMySQL() Then
    EnableMySQLIndices();
End If

ВОПРОС

Есть ли какие-нибудь интересные вещи, которые я могу сделать с SQL Server, которые могли бы ускорить эти вставки?

Например, есть ли команда, которую я мог бы выполнить, чтобы сказать SQL Server: «Эй, не беспокойтесь о записи этих транзакций в журнал транзакций».

Или, может быть, я мог бы сказать: «Эй, у меня есть миллион строк, поэтому не обновляйте свой индекс, пока я полностью не закончу».

ALTER INDEX [IX_TableIndex] ON Table DISABLE
     ... inserts
ALTER INDEX [IX_TableIndex] ON Table REBUILD

(Примечание: отключение индекса выше работает только в 2005 году, но не в 2000 году. Бонусные баллы, если вы знаете способ сделать это в 2000 году).

А как насчет MySQL и Access?

Ответы [ 11 ]

0 голосов
/ 07 января 2009

Возможно, вы захотите использовать модель восстановления с массовой регистрацией SQL во время массовой вставки.

http://msdn.microsoft.com/en-us/library/ms190422(SQL.90).aspx

http://msdn.microsoft.com/en-us/library/ms190203(SQL.90).aspx

Вы также можете отключить индексы на целевой таблице во время вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...