2012-03-04 12 views
0

私は狂ったような問題を引き起こしています。サーバーの移動後、クエリはもう機能しません

ASP + SQL Serverアプリケーションを古いサーバーから新しいサーバーに移動しました。

古いものはMSDEを搭載したWindows 2000サーバーで、新しいものはSQL Server 2008 Expressを搭載したWindows 2008です。

aspページにタイムアウトが与えられている関数を除いて、すべてが問題ありません。

管理クエリウィンドウでそのページ内でクエリを実行しようとしましたが、古いサーバーでは約1分かかりました。私はテーブルに最後の行で2つのビューを変換しようとした

SELECT DISTINCT 
    TBL1.TBL1_ID, 
    REPLACE(TBL1_TITOLO, CHAR(13) + CHAR(10), ’ ’), 
    COALESCE(TBL1_DURATA, 0), TBL1_NUMERO, 
    FLAG_AUDIO 
FROM 
    SPOT AS TBL1 
INNER JOIN 
    CROSS_SPOT AS CRS ON CRS.TBL1_ID = TBL1.TBL1_ID 
INNER JOIN 
    DESTINATARI_SPOT AS DSP ON DSP.TBL1_ID = TBL1.TBL1_ID 
WHERE 
    DSP.PTD_ID_PUNTO = 1044 
    AND DSP.DSP_FLAG_OK = 1 
    AND TBL1.FLAG_AUDIO_TESTO = 1 
    AND TBL1.FLAG_AUDIO_GRAFICO = ’A’ 
    AND CRS.CRS_STATO > 2 
    OR TBL1.TBL1_ID IN (SELECT ID 
         FROM V_VIEW1 
         WHERE ID IS NOT NULL AND V_VIEW1.ID_MODULO = 403721) 
    OR TBL1.TBL1_ID IN (SELECT TBL1_ID 
         FROM V_VIEW2 
         WHERE V_VIEW2.ID_PUNTO = 1044) 
ORDER BY 
    TBL1_NUMERO 

とクエリは、作品にも以前より少し遅くなる場合:

クエリは、この一つです。

データベースをバックアップ/リストア機能で移行しました。それはインデックス問題になりますか? 提案がありますか?

ありがとうございます!

アレッサンドロ

+0

クエリプラン、スキーマ、さらにはデータのような細かい詳細がなければ、これに答えることはできません。一般的にクエリの最適化についてお読みになることをお勧めします。 – usr

+0

クエリプラン – Randy

+0

から始めることをお勧めします。これらのインデックス付きビューは古いサーバー上にあったのですか? –

答えて

2

ラン:

--Defrag all indexes 
sp_msForEachTable 'DBCC DBREINDEX (''?'')' 

--Update all statistics 
sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN' 

それは「ちょうどそれを修正」していない場合には、それは物事が悪化し、SQL Serverのオプティマイザでは、いくつかの微妙な「改善」になるだろう。

インデックスチューニングウィザード(またはそれに相当するSSMS2008のもの)を試してください。

その後、速く実行されるまで物事を取り除き、クエリを別々に取り出す必要があります。それらの1が最も遅い

SELECT ... FROM ... 
WHERE DSP.PTD_ID_PUNTO = 1044 
AND DSP.DSP_FLAG_OK = 1 
AND TBL1.FLAG_AUDIO_TESTO=1 
AND TBL1.FLAG_AUDIO_GRAFICO=’A’ 
AND CRS.CRS_STATO>2 

--UNION 

SELECT ... FROM ... 
WHERE TBL1.TBL1_ID IN (
    SELECT ID 
    FROM V_VIEW1 
    WHERE ID IS NOT NULL 
    AND V_VIEW1.ID_MODULO = 403721 
) 

--UNION 

SELECT ... FROM ... 
WHERE TBL1.TBL1_ID IN (
    SELECT TBL1_ID 
    FROM V_VIEW2 
    WHERE V_VIEW2.ID_PUNTO = 1044 
) 

を参照してください:あなたは2つのOR句を持っているので、あなたは基本的に3つの別々のクエリを持っています。

p.s. 1分ほどかかるクエリはかなり悪いです。私の意見は、クエリは即座に(人間の観察の範囲内で)返すべきであるということです。

関連する問題