2012-05-03 4 views
2

ビューを使用するストアドプロシージャがあります。ストアドプロシージャは、さまざまなパラメータを受け入れます。値を返すときにSQL Server 2008 R2の行数に時間がかかります

私が試してみました:

SELECT 
    COUNT(v.CampaignID) as RecordCount 
FROM 
    VW_Results_ValueRank_2010_12_22_NEW V       
INNER JOIN 
    ResultTopic ON V.ResultID = ResultTopic.ResultId  
INNER JOIN 
    CampaignTopic on ResultTopic.topicid = CampaignTopic.topicid   
WHERE 
    v.CampaignID = 37       
    AND v.CreateDate BETWEEN 'May 3 2011 8:25PM' AND 'May 3 2012 8:25PM'       
    AND v.SourceDate BETWEEN DATEADD(d,-3,'May 3 2011 8:25PM') AND 'May 3 2012 8:25PM' 
    AND (LEFT(Title, 80) LIKE '%google%' OR Domain LIKE '%google%' OR LEFT([Text], 300) LIKE '%google%') 

それは2016年のレコードを返しますが、40〜50秒を要し、私は5-10秒にこの時間を短縮することができます。助けてください。

+0

あなたは 'CampaignID'、' CreateDate'と 'SourceDate'列のインデックスを持っていることを確認し、物事をスピードアップします。しかし、最後のWHERE節では、 'LIKE '%google%'と' LEFT(...) 'を使用して、SQL Serverがインデックスを使用できないことをほぼ確実にしています。 WHERE'節の最後の部分を使わずに*クエリを実行しようとしていますか?それは今より速いのですか? –

+0

私はどこを削除する場合、間違ったデータを取得します。 –

+0

marc_sに感謝します。だから、どこでそれを速くする方法はありません。 –

答えて

2

実行計画を見て、見つからなかったインデックスを確認して作成することができます。

すべてindexexがあると何のインデックスは、あなたがCREATEDATE、SourceDateとwhere句内の他の列のインデックスビューを作成することができ、テーブルの上に作成できない場合。

refer this link

関連する問題