2016-12-14 3 views
4

Я создал запрос, в который я вставляю в пустую таблицу результат выбора из другой таблицы.Вставить из выбранной производительности SQL Server

Это выбрать сам по себе занимает ~ 20 минут (30 м, 120 строк и столбцов "где" условия, и это хорошо), но вставка в занимает ~ 1 час.

Есть ли у вас какие-либо предложения по его улучшению?

Что я сделал, как в приведенном ниже примере.

Insert Into tableA 
Select * 
From TableB 

Цените свою помощь!

ответ

2

Отбросьте все индексы на TableA, а затем вставьте снова:

INSERT INTO tableA 
SELECT * FROM TableB 

Индексы известны замедлиться операторы вставки.

+0

Я сделал это. Но это займет еще час, чтобы сделать вставку. –

+0

Какие rdbms вы используете? MySQL или SQL-Server? @Ric_R – sagi

+0

SQL Server. Спасибо –

0

Под уже упомянутыми индексами вы можете проверить, определены ли в таблице A ограничения (первичный ключ, внешний ключ и т. Д.), Поскольку ограничения часто реализуются индексами.

Кроме того, вы можете проверить наличие триггеров на TableA. Другим испытанием будет экспорт/выгрузка TableB в файл, например. TableB.txt, а затем импортировать/загрузить файл TableB.txt в TableA. (Извините, я не знаю синтаксиса SQL Server).

Другим предметом для проверки может быть журнал транзакций. Вероятно, можно изменить каротаж на BULK_LOGGED, см.: Disable Transaction Log

+0

Сбои и триггеры не должны запускаться при выполнении команды SELECT '. Ограничения и триггеры будут выполняться только на событиях DML ('INSERT, UPDATE, DELETE'). –

Смежные вопросы