カバリングインデックスを介してインデックス付きビューから結果を返すストアドプロシージャがあります。通常、高速(約10ミリ秒)で実行され、最大8秒まで実行されることもあります。
ランダム実行の例を次に示します(注:これは低速ではありませんが、クエリテキストは、渡される値を除いて同じです)。
declare @p2 dbo.IdentityType
insert into @p2 values(5710955)
insert into @p2 values(5710896)
insert into @p2 values(5710678)
insert into @p2 values(5710871)
insert into @p2 values(5711103)
insert into @p2 values(6215197)
insert into @p2 values(5710780)
exec ListingSearch_ByLocationAndStatus @statusType=1,@locationIds=@p2
スプロックは次のとおりです。
ALTER PROCEDURE [dbo].[ListingSearch_ByLocationAndStatus]
@LocationIds IdentityType READONLY,
@StatusType TINYINT
AS
BEGIN
SET NOCOUNT ON;
SELECT -- lots of fields
FROM [dbo].[ListingSearchView][a] WITH (NOEXPAND)
INNER JOIN @LocationIds [b] ON [a].[LocationId] = [b].[Id]
WHERE [a].[StatusType] = @statusType
OPTION (RECOMPILE);
(注:OPTION (RECOMPILE)
いくつかのアドバイスの後に最近ヒントを追加しましたが、助けにはなりませんでした。
カバーインデックスは次のとおりです(注:ビューには、ListingId
一意のクラスター化インデックスもあります)
CREATE NONCLUSTERED INDEX [IX_ListingSearchView_ForAPI] ON [dbo].[ListingSearchView]
(
[LocationId] ASC,
[StatusType] ASC
)
INCLUDE ( -- all the fields in the query) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
showplan XML統計を使用して、プロファイラートレースを配置します。
私が期待するとおりに見え、クエリが高速の場合と同じ計画です。
ビュー/バッキングテーブルの完全なスキーマを次に示します(それが役立つ場合):https : //pastebin.com/wh1sRcbQ
ノート:
- インデックスはデフラグされており、統計は最新です。
- もともとクエリはビューに対してインラインでしたが、安定させるためにSPROCに移動しました。助けていない。
WITH OPTION (RECOMPILE);
ヒントの追加(機能しなかったので、パラメータスニッフィングはできませんか?)- システム内の他のクエリも実行が遅い場合があり、計画にも明らかな問題はありません。
- ロックできますか?確認方法がわからない。
次に試すことができるアイデアはありますか?
ありがとう