У меня есть следующий запрос в хранимой процедуре:Как улучшить Perfomance из запроса SQL Server
UPDATE dbo.CRM_tblActivityStore
SET StoDateChngFlg = CASE
WHEN x.STAGE_STAD <> x.ACTSTR_STAD THEN 1 ELSE 0 END
FROM (SELECT CASE
WHEN sd.stad = '00000000' THEN '12-31-2049' ELSE CONVERT (DATE, sd.stad)
END AS STAGE_STAD,
CONVERT (DATE, tas.StoDateSTA) AS ACTSTR_STAD,
tas.StoActivityNbr,
sd.Proj_Code,
sd.OrderNbr,
sd.FileNbr
FROM [SCM Server].[OrdrMgmt].dbo.STAGE_StageData AS sd
INNER JOIN
dbo.CRM_tblActivityStore AS tas
ON sd.Proj_Code = tas.StoProjCode
AND sd.OrderNbr = tas.StoOrderNbr
AND sd.FileNbr = tas.StoFile) AS x
INNER JOIN
dbo.CRM_tblActivityStore AS tast
ON tast.StoActivityNbr = x.StoActivityNbr
AND tast.StoProjCode = x.Proj_Code
AND tast.StoOrderNbr = x.OrderNbr
AND tast.StoFile = x.FileNbr;
Некоторые больше информации, которая может помочь:
[SCM сервера] [OrdrMgmt] .dbo.STAGE_StageData. - имеет более 2 000 000 строк dbo.CRM_tblActivityStore - имеет более 5 000 000 строк
Ни одна из этих таблиц не проиндексирована и не имеет ключа Primery.
Это займет больше 3 часов.
Как можно улучшить добавление индекса?
Любые другие идеи, как улучшить его?
Спасибо,
Илан
Yikes !!! Таблицы без кластеризованных индексов называются кучами. У вас есть пара хороших размеров. Здесь нет никаких шансов улучшить производительность без каких-либо структурных изменений в ваших таблицах. Вам нужен первичный ключ, и вам нужно будет добавить некоторую индексацию. Без подробностей трудно понять, что это может быть. –
первая сделка - обновить статистику second - indexes – DimaSUN
Я заметил, что вы используете таблицу со связанного сервера в соединении. Нехорошая идея (имхо). Если U использует SQL Server 2008+ - попробуйте использовать cross apply – DimaSUN