2016-04-04 4 views
0

Я бегу на Sql Server 2014. Я пытаюсь выполнить следующий запрос:Оптимизировать Обновление запросов по таблицам

UPDATE [dbo].[Table1] 
    SET Table1.[PaymentId] = ST.PaymentId 
     ,Table1.[ServiceId] = ST.ServiceId 
     ...several more fields 
FROM [dbo].[StagingTable] as ST 
WHERE 
    Table1.Id = ST.Id 

Table1 имеет идентичность и индекс Id, но StagingTable не имеет индекс для Я бы. Я оставил индекс на StagingTable, потому что мне нужно сделать очень быструю вставку данных. У меня около 4 миллионов записей в каждой таблице.

Этот запрос работает очень медленно, потому что он выполняет сканирование таблицы для StagingTable и поиск искаженного индекса в таблице1 изначально в плане выполнения. Тем не менее, я хотел бы сортировать по Id в StagingTable, а затем выполнение должно быть сканированным индексом, а не поиском.

Кто-нибудь знает, как это сделать в запросе на обновление? Я делаю это как часть задания SSIS, поэтому я пытаюсь сделать все это в рамках одного запроса.

+0

вы должны добавить отношение между двумя таблицами – Sherlock

ответ

1

После загрузки данных в к StagingTable, затем создать индекс:

create index idx_stagingtable_id on stagingtable(id); 

Это не замедлит сыпучий груз, и он будет делать это идти гораздо быстрее.

+0

Я хотел что-то сделать в рамках запроса Update, а не добавлять другой запрос. Как подсказка вопроса, может быть ... – Corez

+0

вы можете следовать предложению, чтобы не получить сканирование – TheGameiswar

+0

ну ... Я специально спросил, можете ли вы сделать это в запросе обновления ... – Corez

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