Мое приложение проверяет, существует ли номер счета в поле номера счета. Если он не существует, для параметра @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)