2016-01-12 2 views
0

может кто-нибудь помочь мне изменить ниже суб запрос в условии соединения, так что мы можем улучшить производительность сценарияизменения Sub Запроса присоединиться состояние

from #Head   hw 
     join Employee   et 
     on hw.EmployeeCode = et.EmployeeCode 
     and et.BonusFlag  = 1 
     join Bonus   cb 
     on hw.BonusId    = cb.BonusId 
     and cb.CompanyId   = @CompanyId 
     join bonus b 
     on hw.BonusId    = b.BonusId 
     join Expense  pr 
     on pr.CompanyId   = @CompanyId 
     and pr.ModuleId   = b.ModuleId 
    Where hw.BucketId  = @BucketId 
     and upper (et.EmployeeCode)  <> 'H' 
     and hw.bucketcode not in (Select centercode from NExclusion) 
+0

Пожалуйста, научитесь использовать правильный синтаксис 'JOIN'. Никогда не используйте запятые в предложении 'FROM'. * Всегда * используйте правильные явные 'JOIN'. –

ответ

0
from #Head hw 
    join NExclusion on NExclusion.centercode = hw.bucketcode 
    join Employee et on hw.EmployeeCode = et.EmployeeCode 
    join Bonus b on hw.BonusId = b.BonusId 
    join Expense pr on pr.CompanyId = @CompanyId and pr.ModuleId = b.ModuleId 
    Where hw.BucketId = @BucketId and et.BonusFlag = 1 and b.CompanyId = @CompanyId and et.EmployeeCode <> 'h' 

Я сделал следующие изменения:
1) Переместил все условия в одно место в последнем после предложения where.
2) Sql не чувствителен к регистру, поэтому вам не нужно преобразовывать EmployeeCode в верхний регистр и сравнивать, я удалил это, чтобы уменьшить эту служебную нагрузку.
3) Изменено условие IN для соединения. 4) Удалено дублирующееся соединение с помощью таблицы бонусов

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