Долгосрочный запрос к самостоятельной таблице - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь улучшить производительность запроса, который обновляет столбец в каждой строке таблицы, сравнивая фактические значения строки со всеми другими строками в той же таблице. Вот запрос:

update  F set   
    PartOfPairRC = 1
from    RangeChange F
where     Reject=0
and exists( 
            select 1 from RangeChange S
            where   F.StoreID = S.StoreID
            and F.ItemNo = S.ItemNo
            and       F.Reject = S.Reject
            and F.ChangeDateEnd = S.ChangeDate - 1)

Производительность запроса быстро снижается по мере увеличения количества строк в таблице. У меня в таблице 50 миллионных строк.

Есть ли лучший способ сделать это? Сможет ли SSIS справиться с такой операцией лучше?

Любая помощь высоко ценится, спасибо Роберт

1 Ответ

1 голос
/ 30 сентября 2011

Вы можете попытаться создать индекс для этой таблицы:

create index idx_test on RangeChange(StoreID, ItemNo, Reject, ChangeDateEnd) where reject = 0

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

- я бы написал запрос как объединение:

update F set
   F.PartOfPairRC = 1
from  RangeChange F
   join RangeChange S
      on F.StoreID = S.StoreID
         and F.ItemNo = S.ItemNo
         and F.Reject = S.Reject
         and F.ChangeDateEnd = S.ChangeDate - 1
where F.Reject=0 and S.Reject = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...