Использование coalesce в хранимой процедуре занимает 3 раза больше времени для выполнения - PullRequest
0 голосов
/ 25 марта 2019

Мое приложение проверяет, существует ли номер счета в поле номера счета. Если он не существует, для параметра @AccountNumber вводится «000000». При тестировании в SQLSMS для проверки времени выполнения, я заметил, что использование coalesce для проверки значения занимает почти 3 раза больше времени для выполнения. Почему время выполнения в приведенных ниже примерах не будет одинаковым, поскольку оба запроса используют номер счета? Обратите внимание, что в первом примере я использую параметр с coalesce, а во втором примере я просто использую номер счета.

Запрос возвращает 18 000 строк с каждой: 37 секунд для загрузки:

   Declare @AccountNumber varchar(15) = '001234'
   Declare @EmployeeNumber varchar (15) = ''
   Declare @AccountType varchar (20) = 'Account Type'

    select DISTINCT AccountTable.ACCOUNT_TYPE, 
    PayrollTable.EmployeeNumber, 
    AccountTable.ACCOUNT_NUMBER 

    from AccountTable 
    LEFT JOIN PayrollTable
    ON AccountTable.ACCOUNT_NUMBER = PayrollTable.ACCOUNT_NUMBER

    where (coalesce(@AccountNumber,'') = '000000' or AccountTable.ACCOUNT_NUMBER = @AccountNumber)
    AND (coalesce(@EmployeeNumber,'') = '' or PayrollTable.EmployeeNumber = @EmployeeNumber)
    AND (coalesce(@AccountType,'') = 'Account Type' or AccountTable.ACCOUNT_TYPE = @AccountType)

12 секунд для загрузки:

   Declare @AccountNumber varchar(15) = '001234'
   Declare @EmployeeNumber varchar (15) = ''
   Declare @AccountType varchar (20) = 'Account Type'

    select DISTINCT AccountTable.ACCOUNT_TYPE, 
    PayrollTable.EmployeeNumber, 
    AccountTable.ACCOUNT_NUMBER 

    from AccountTable 
    LEFT JOIN PayrollTable
    ON AccountTable.ACCOUNT_NUMBER = PayrollTable.ACCOUNT_NUMBER

    where (AccountTable.ACCOUNT_NUMBER = @AccountNumber)
    AND (coalesce(@EmployeeNumber,'') = '' or PayrollTable.EmployeeNumber = @EmployeeNumber)
    AND (coalesce(@AccountType,'') = 'Account Type' or AccountTable.ACCOUNT_TYPE = @AccountType)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...