2017-01-05 15 views
0

次のコードを使用して目的の行を選択していますが、問題がこの部分に問題があることを他の表のDocumentNumber列のselectでパフォーマンスが低い--->( '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 

パフォーマンスを向上させる他の解決方法がある場合は、教えてください。

+0

私はこの質問がhttp://codereview.stackexchange.com/にあると信じています – Alex

+2

xmlと利用可能なインデックスとして実行プランを追加します –

+0

どのRDBMSがこれですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

答えて

0

@ItemStatusはスカラーパラメータです。比較の各行ではなく、一度この操作を実行できますか?シーンの連結の背後にある多くを排除します。

set @InItemStatusPound = 'IN-'[email protected] + '#' 

ItemFK=(@InItemStatusPound+chequeserial) 

これは、通常、ルックアップテーブルが、文字列値ではなくintなどの数値に基づく外部キーを持つ理由の1つです。連結が必要な文字列ではなく整数に結合を実行していますか?

注:文字列が32ビット未満であることが保証できる場合は、int値ではなく文字列を使用するだけで問題ありません。彼らの利点はコンパクトさです。

セイジアドバイス:一般的に、何か痛い場合は、それをやりなおす方法を見つけてください。

+0

私のコードはC#テーブルアダプタではなく、ストアドプロシージャです! –

関連する問題