2013-08-21 3 views
0

У меня путаная проблема. У меня есть SP, который включает запрос с несколькими JOINs (2 из них - LEFT JOIN). SP занимает 10 секунд, и если я выполняю запрос в качестве запроса - это займет 200 мс ...Медленно, как хранимая процедура, быстро, как запрос - не параметр sniffing

Это не проблема с параметрами нюхания: даже если я очищаю кеш и выполняю SP только с одним набором параметров - все еще медленно. Я также пытаюсь выполнить SP с перекомпиляцией и добавить опцию (перекомпилировать) в запросе в SP - все еще медленно.

Я стараюсь эти ссылки:

Я должен также упомянуть, что:

  1. 2 параметров 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 
+1

Можем ли мы увидеть код SP? –

+0

согласен с @jyparask, лучше всего предоставить свой код для нас, чтобы рассмотреть =) –

+0

Принятый ответ с первой ссылки, которую вы предоставили, должен сделать трюк. Просто скопируйте свои входные параметры в локальные переменные и работайте с ними. –

ответ

0

Это было решение:

CREATE TABLE #ListOfIDs (ID int) 
insert into #ListOfIDs (ID) select ID from @ListOfIDs 

CREATE TABLE #ListOfTwoIDs (FirstID int, SecondID int) 
insert into #ListOfTwoIDs (FirstID, SecondID) select FirstID, SecondID from @ListOfTwoIDs 

Я думаю, что этот вопрос с параметрами-таблиц типов, но я до сих пор не понимаю, почему и что ...

Смежные вопросы