100MM を超えるレコードを含むテーブルがあります。テーブルには、クラスター化インデックスと非クラスター化インデックスがあります。
テーブルで T-SQL を使用して基本的なカウントを実行でき、実行に 1 秒かかります。同じ正確な数のクエリをストアド プロシージャ内に配置すると、実行に 12 秒かかります。
標準クエリとストアド プロシージャの両方の実行プランを確認しましたが、どちらも非クラスター化インデックスを使用しています。
ストアド プロシージャが標準のクエリに比べて遅い理由がわかりません。
このような状況でのインデックスの再作成についていくつか読んだことがありますが、なぜそれを行う必要があるのかわかりません。また、インデックスの再作成には数時間かかるため、確実に機能するようにしたいと考えています。
これに関するヘルプは素晴らしいでしょう。
ありがとう
アップデート
ストアド プロシージャは次のとおりです。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE quickCount
@sYID INT,
@eYID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(leadID)
FROM dbo.leads
WHERE yearID >= @sYID
AND yearID <= @eYID
END
GO
そして、これが標準的なクエリです:
SELECT COUNT(leadID)
FROM leads
WHERE yearID >= 0
AND yearID <= 99
パラメータなしで実行しようとしたところ、SP の実行速度が大幅に向上しました (1 秒)。だから私はそれがパラメータと関係があると仮定しています。