Как оптимизировать приведенный ниже SQL-запрос - PullRequest
0 голосов
/ 07 ноября 2019

Как оптимизировать запрос ниже.

ALTER FUNCTION  [dbo].[GetVostroAccountByAccountWithInstitution]  

(    
 @P_AccountWithInstitution varchar(150)
)  
RETURNS VARCHAR(15)  
AS   
    BEGIN               
            DECLARE  @VostroAccount VARCHAR(15)  

            IF EXISTS(SELECT 1 FROM VostroAccConfig WHERE SwiftCode=@P_AccountWithInstitution)
                BEGIN
                    SET @VostroAccount=(SELECT VostroAcc FROM VostroAccConfig WHERE SwiftCode=@P_AccountWithInstitution)
                END
            ELSE IF EXISTS(SELECT 1 FROM VostroAccConfig WHERE SwiftCode8=@P_AccountWithInstitution)
                BEGIN
                    SET @VostroAccount=(SELECT VostroAcc FROM VostroAccConfig WHERE SwiftCode8=@P_AccountWithInstitution)
                END

            RETURN @VostroAccount
    END

1 Ответ

0 голосов
/ 07 ноября 2019

Первым шагом было бы не использовать скалярную функцию. Встроенная табличная функция будет работать намного лучше. Чтобы табличная функция была встроенной, она ДОЛЖНА быть одним запросом. К счастью, вы можете сделать это с помощью функции, которую вы опубликовали.

create function [dbo].[GetVostroAccountByAccountWithInstitution]  
(    
    @P_AccountWithInstitution varchar(150)
) returns table as return
    select top 1 VostroAcc
    from VostroAccConfig
    where @P_AccountWithInstitution in (SwiftCode, SwiftCode8)
    order by SwiftCode
        , SwiftCode8

Следующий шаг в быстром выполнении - индексация. Но без знания таблицы трудно вносить предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...