Низкая производительность при объединении

Я использую следующий код для выбора желаемых строк, но проблема в том, что он имеет низкую производительность при выборе DocumentNumber столбец из другой таблицы, что проблема в этой части ---> ('IN-'+@ItemStatus+'#'+chequeserial)

SELECT     
    Banking.ReceivedCheque.Date, Banking.ReceivedCheque.StatusDate,
    Banking.ReceivedCheque.DueDate, Banking.ReceivedCheque.ChequeSerial, 
    Banking.ReceivedCheque.BankName Banking.ReceivedCheque.CompanyInfoFK, 
    Banking.ReceivedCheque.FinancialPeriodFK, 
    Banking.ReceivedCheque.CreditGFK, Banking.ReceivedCheque.CreditID, 
    ReceivedFromAccount = dbo.getname(CreditID, CreditGFK, FinancialPeriodFK),
    DefBankAccount = dbo.getname(DefaultBankID, '4', FinancialPeriodFK), 
    Banking.ReceivedCheque.StatusFK,
    Banking.ChequeStatus.Title,
    (SELECT MAX(DocumentFK) 
     FROM Accounting.DocumentDetail 
     WHERE ItemFK = ('IN-' + @ItemStatus + '#' + chequeserial)  
       AND financialPeriodFK = @FinancialPeriodFK) AS DocumentNumber
FROM         
    Banking.ReceivedCheque 
INNER JOIN
    Banking.ChequeStatus ON Banking.ReceivedCheque.StatusFK = Banking.ChequeStatus.ChequeStatusID
WHERE
    ReceivedCheque.FinancialPeriodFK = @FinancialPeriodFK  
    AND Banking.ReceivedCheque.StatusFK = @StatusFK

Пожалуйста, дайте мне знать, если есть другое решение для повышения производительности.

1 ответ

Похоже, @ItemStatus является скалярным параметром. Можете ли вы выполнить эту часть операции один раз, а не для каждой строки сравнения? Вы бы избавились от многих конкатенаций за сценой.

set @InItemStatusPound = 'IN-'+@ItemStatus + '#'

ItemFK=(@InItemStatusPound+chequeserial)

Обычно это одна из причин, по которым таблицы поиска имеют внешние ключи, основанные на числовых значениях, таких как int, а не на строковых значениях. Является ли выполнение соединения целым числом, а не строкой, требующей конкатенации, как вариант?

Примечание. Если вы можете гарантировать, что строка будет менее 32 бит, лучше использовать строки, а не значения int. Их преимущество заключается в их компактности.

Совет мудреца: Как правило, если что-то болит, подумайте, как этого не делать.

Другие вопросы по тегам