2012-06-11 3 views
1

В настоящее время я пытаюсь оптимизировать код sql. Я хотел бы знать, есть ли альтернативный способ написания этих утверждений, потому что, похоже, на это уходит много времени.Оптимизация операторов обновлений

Update #TMP---updates webid when its null in tmp table 
Set #TMP.webid_Val='NOT COMPLIANT' 
Where #TMP.webid is null 

Update #TMP---updates PID when its null in tmp table 
Set #TMP.PID_Val='NOT COMPLIANT' 
Where #TMP.Pid is null 

Update #TMP---Shifts multiple fob situations into storewide 
Set #TMP.GMM ='Storewide' 
Where #TMP.gmm like '%, %'; 

Update #TMP-----Shifts marketing into multiple fob situation 
Set #TMP.GMM ='Storewide' 
Where #TMP.gmm like 'Marketing%' 


Update #TMP 
Set #TMP.OVERALL_Val='NOT COMPLIANT' 
Where #TMP.webid is null 

У этого есть более чем 22 000 записей.

+0

Это для Sql Server? – pstrjds

+0

Оптимизация этого единственного обновления кажется небольшой. Если процесс выполняется медленно, уверены ли вы, что проблема не вызывается слишком часто? Для каждого запроса необходимо сканировать всю таблицу каждый раз, когда это выполняется. Проблема может заключаться в том, что вам нужно изменить другие части процесса. –

+0

Как бы я это сделал? – MasterP

ответ

3

Непонятно, что это будет быстрее, так как это будет зависеть от данных, но один оператор обновления может работать лучше всего.

Update #TMP 
Set #TMP.webid_Val= 
     CASE 
      WHEN #TMP.webid is null THEN 'NOT COMPLIANT' 
      ELSE #TMP.webid_Val 
     END 
    ,#TMP.PID_Val= 
     CASE 
      WHEN #TMP.Pid is null THEN 'NOT COMPLIANT' 
      ELSE #TMP.PID_Val 
     END 
    ,#TMP.GMM= 
     CASE 
      WHEN (#TMP.GMM like '%, %' OR #TMP.gmm like 'Marketing%') THEN 'Storewide' 
      ELSE #TMP.GMM 
     END 
    ,#TMP.OVERALL_Val= 
     CASE 
      WHEN (#TMP.webid is null) THEN 'NOT COMPLIANT' 
      ELSE #TMP.OVERALL_Val 
     END 
WHERE #TMP.webid is null 
OR #TMP.Pid is null 
OR #TMP.gmm like '%, %' 
OR #TMP.gmm like 'Marketing%' 
1

Сама первая часть, я вижу, что вы можете комбинировать эти заявления два обновления:

Update #TMP---updates webid when its null in tmp table 
Set #TMP.webid_Val='NOT COMPLIANT' 
Where #TMP.webid is null 

Update #TMP 
Set #TMP.OVERALL_Val='NOT COMPLIANT' 
Where #TMP.webid is null 

в:

Update #TMP---updates webid when its null in tmp table 
Set #TMP.webid_Val='NOT COMPLIANT', 
    #TMP.OVERALL_Val='NOT COMPLIANT' 
Where #TMP.webid is null 

Вы можете объединить два обновления GMM в следующем:

Update #TMP---Shifts multiple fob situations into storewide 
Set #TMP.GMM ='Storewide' 
Where LEFT(#TMP.gmm, 9) = 'Marketing' 
OR #TMP.gmm like '%, %'; 

Выполнение LEFT в отличие от LIKE сопоставление должно быть немного более результативным (обратите внимание: не уверен в этом, вам придется проверить его, чтобы проверить).

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