У меня путаная проблема. У меня есть SP, который включает запрос с несколькими JOINs (2 из них - LEFT JOIN). SP занимает 10 секунд, и если я выполняю запрос в качестве запроса - это займет 200 мс ...Медленно, как хранимая процедура, быстро, как запрос - не параметр sniffing
Это не проблема с параметрами нюхания: даже если я очищаю кеш и выполняю 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, лучше всего предоставить свой код для нас, чтобы рассмотреть =) –
Принятый ответ с первой ссылки, которую вы предоставили, должен сделать трюк. Просто скопируйте свои входные параметры в локальные переменные и работайте с ними. –