0
我有一個困惑的問題。我有一個包含少數JOIN的查詢(其中2個是LEFT JOIN)。 SP需要10秒鐘,如果我執行查詢作爲查詢 - 這需要200毫秒... ...緩慢的存儲過程,快速查詢 - 不參數嗅探
這不是參數嗅探問題:即使我清理緩存並執行SP只有一組參數 - 仍然很慢。 我也嘗試使用重新編譯來執行SP,並在SP中的查詢中添加選項(重新編譯) - 仍然很慢。
我嘗試這些鏈接:
- Query runs fast, but runs slow in stored procedure
- SQL Server: Query fast, but slow from procedure
- Query times out when executed from web, but super-fast when executed from SSMS
我也有提及:的
- 2參數SP是表格類型。
- 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
我們可以看到SP代碼嗎? –
與@jyparask一致,最好是提供你的代碼供我們考慮=) –
從你提供的第一個鏈接接受的答案應該做的伎倆。只需將您的輸入參數複製到局部變量中,然後使用它們。 –