混乱した問題があります。JOIN が少ない (うち 2 つは LEFT JOIN である) クエリを含む SP があります。SPには10秒かかり、クエリをクエリとして実行すると、200ミリ秒かかります...
これはパラメーター スニッフィングの問題ではありません。キャッシュを消去し、パラメーターのセットを 1 つだけ使用して SP を実行しても、まだ遅いです。また、SP を再コンパイルして実行し、SP のクエリにオプション (再コンパイル) を追加しようとしましたが、それでも遅いです。
私はそれらのリンクを試します:
- クエリは高速に実行されますが、ストアド プロシージャでは実行が遅くなります
- SQL Server: クエリは高速ですが、プロシージャからは低速です
- Web から実行するとクエリがタイムアウトするが、SSMS から実行すると超高速
また、次のことにも言及する必要があります。
- SP の 2 つのパラメータはテーブル型です。
- SP には動的 SQL はありません。
それで - ここでの話は何ですか?
これはSPコードです:
CREATE PROCEDURE [dbo].[spr_spr]
@ListOfIDs dbo.tt_IDsList READONLY, -- (one column - ID)
@ListOfTwoIDs dbo.tt_TwoIDsRelationList READONLY, -- (two columns - FirstID, SecondID)
@SomeID int = NULL
AS
IF @SomeID IS NULL
SELECT ..... ,
cast ( (CASE WHEN le.ID IS NOT NULL THEN 1 ELSE 0 END) as bit) as HasLinkedID
FROM @ListOfIDs ids
JOIN dbo.tbl1 ra ON ids.ID = ra.RR_RowID
JOIN dbo.tbl2 rr ON ra.RR_RowID = rr.RowID
JOIN dbo.tbl3 res ON res.tbl3ID = ra.tbl3ID
JOIN dbo.tbl4 cal ON cal.ObjectID = rr.ObjectID
JOIN @ListOfTwoIDs IdsRel ON cal.FirstID = IdsRel.FirstID
AND res.SecondID = IdsRel.SecondID
LEFT JOIN dbo.tbl5 p ON ra.tbl5ID = p.tbl5ID
LEFT JOIN dbo.tbl6 le ON le.tbl6ID = ra.tbl6ID
ELSE
.... -- same query with one change