0

リンク サーバー上のビューから選択するインライン テーブル値関数を使用して完了するのに約 14 分かかるクエリがあります。ただし、このクエリを変更して関数を削除し、クエリから直接選択すると、約 20 秒で完了します。

関数:

CREATE FUNCTION [dbo].[fn_GetView](CompanyCharacters VARCHAR(4))
RETURNS TABLE
AS
RETURN
(
    SELECT DISTINCT
           [Some Rows]
    FROM   LinkedServer.Database.dbo.LinkedView
    WHERE  Co_char = RIGHT(REPLACE('0', 4) + 
                           CAST(@CompanyCharacters AS VARCHAR(4)), 4)
)

14 分かかるクエリ:

SELECT DISTINCT
       [Some Rows]
FROM   fn_GetSomeCompanyData() AS Comp
       JOIN CustomerData ON Comp.ID = CustomerData.CompID
       JOIN fn_GetView('MSF') AS gv ON gv.CompanyChar = Comp.CompanyChar
                                    AND gv.FirstName = Comp.FirstName
                                    AND gv.FirstName = Comp.FirstName

20 秒かかる変更されたクエリ:

SELECT DISTINCT
       [Some Rows]
FROM   fn_GetSomeCompanyData() AS Comp
       JOIN CustomerData ON Comp.ID = CustomerData.CompID
       JOIN LinkedServer.Database.dbo.LinkedView AS gv ON gv.CompanyChar = Comp.CompanyChar
           AND gv.FirstName = Comp.FirstName
           AND gv.FirstName = Comp.FirstName
           AND gv.Co_char = RIGHT(REPLACE('0', 4) + 'MSF', 4)
WHERE [Some Data Filtering]

なぜこれがこのように動作するのか、誰にもアイデアがありますか? 高速でありながら関数を保持できるようにクエリを変更する最良の方法はありますか?

4

0 に答える 0