web-dev-qa-db-ja.com

アプリからのSQLクエリが遅く、SQL Studioから高速

アプリから呼び出されると30秒以上かかるクエリがありますが、SQL SMSから直接呼び出されると<1秒かかります。

これがクエリです:

SELECT T0.pk 
    FROM   products T0 
    WHERE  (( ( T0.pk IN (SELECT T1.target 
                               FROM   catrel T1 
                               WHERE  ( T1.source = 87960962008461 ) 
                                      AND ( T1.type = 87961011815221 )) 
                AND T0.pk NOT IN (SELECT T2.target 
                                       FROM   varexc T2 
                                       WHERE  ( T2.source = 87960962008461 ) 
                                              AND ( 
                                      T2.type = 87961020990261 )) ) 
               OR ( T0.pk IN (SELECT T3.target 
                                   FROM   varinc T3 
                                   WHERE  ( T3.source = 87960962008461 ) 
                                          AND ( T3.type = 87961021066258 
                                              )) ) )  ) 
           AND ( T0.type IN ( 87961022300198, 87916102426706 ) ) 
    ORDER  BY T0.p_code 

どこからデバッグを開始すればよいかわかりません。 SQLデータベースで直接実行すると、即座に応答が返されます。

live query stat

クエリは「最近の高価なクエリ」に表示されます(別のクライアントから実行した場合のみ)

PS:SQL Serverは追加のインデックスを推奨しません。

1
user184569

オプションのPARAMETRIZATIONは「単純」ではなく「強制」でした。単純に戻す+パラメータスニッフィングを無効にすることで問題は解決しました。

1
user184569