2009-05-06 10 views
1

実行に時間がかかっていたレポートがあります。私はデータベース・エンジン・チューニング・アドバイザーを実行し、推奨事項の1つは2つの索引を作成することでした。しかし、インデックスは同じ列であるが、異なる順序であることに気付いた。SQL Server 2005で同じ列を異なる順序でインデックス化しています

---Locations--- 
| *LocationID | 
| Code  | 
| ...more... | 
| DivisionID | 
| RegionID | 
--------------- 

とSQL Serverは、彼らがある時に異なる順序でこれら3列のインデックスを持っている必要がありますなぜ勧告は、これら2つの索引

CREATE NONCLUSTERED INDEX [IX_Locations_Region_Loc_Div] ON [dbo].[Locations] 
(
    [RegionID] ASC, 
    [LocationID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

CREATE NONCLUSTERED INDEX [IX_Locations_Loc_Reg_Div] ON [dbo].[Locations] 
(
    [LocationID] ASC, 
    [RegionID] ASC, 
    [DivisionID] ASC 
) 
INCLUDE ([Code]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 
GO 

を追加しました:ここ

は表です内部結合にのみ使用されますか?

SELECT UserID, LocationID FROM [User] u INNER JOIN [Locations] l ON u.LocationID = l.LocationID 

答えて

2

あなたが含まれているSQLの場合はありません。その推薦をするために考えている他のクエリがなければなりません。

0

チューニングエンジンを実行したときにステートメントにwhere句がありましたか?私は同様にorder by節をステートメントに置き、データベース/チューニングエンジンがインデックスを最適に整列させる方法を知っているかどうかを確認します。

0

質問に答える1つの方法は、インデックスを追加する前にクエリのSQL Server Management Studioの実行計画を見てから、インデックスを追加することです。役に立つ情報がない場合は常に興味深い。

0

私は2005年については分かりませんが、SQL Serverの以前のバージョン(少なくとも一部)は、where句の列がインデックス。好きではないが、それを証明した。

私はちょうどあなたがジョインについて話していることに気付きました - 当時、私はANSI構文を使用するのではなく、ほとんどwhere節にジョインを書いていました。

関連する問題