2011-07-22 3 views
1

このselect文に依存して作成する方法。インデックスを作成する列はどれですか?

SELECT 
     A.FUSERID, A.FNAME, B.FORGNAME, C.FAREA 
FROM 
     TBL_USERPROFILE A 
INNER JOIN 
     V_ORGANISATION B ON A.FORG = B.FORGID 
INNER JOIN 
     V_USER_AOE C ON A.FUSERID = C.FUSERID 
INNER JOIN 
     aspnet_UsersInRoles D ON C.FUSERID = D.UserId 
INNER JOIN 
     aspnet_Roles E ON D.RoleId = E.RoleId 
WHERE 
     E.RoleName = 'applicant' 

このように作成するのは正しいですか?

Create index index.B on TBL_Userprofile A (A.FUSERID, A.FNAME, B.FORGNAME, C.FAREA) 
+1

テーブルのすべての外部キー列にインデックスを付けることも間違いありません。 –

+3

すべての列(時には誤ったフィールド)に 'F'で始まる名前を付けるべきだというコンベンションを作成した人は、このようなコンベンションの無意味さを見ていることを願っています... –

+5

@Damien FI fdou f fuou funderstand fthe frequirement、fthen! – JNK

答えて

0

おそらく、このインデックスをしたい:

create index index_B on aspnet_Roles(RoleName) 
+0

私はその選択ステートメントからの意味...複数のtable.howを組み合わせてインデックスを行う。または私は関係する各テーブルの1つのインデックスで1つを作成する必要がありますか?私を案内してください... – helmi

+0

そのインデックスはwhere節に依存しますか??? – helmi

+1

@helmiいいえ、インデックスの使用方法を誤解していると思います。まず、データベースに作成します。そして、SQL Serverはできるだけいつでもそれを使用します。つまり、SQL Serverはそれを利用するクエリがあるときに使用します。 –

2

ここに含まれた列と示唆したインデックスのリストです。

A.Forg, Fuserid (INCLUDE FNAME) 
B.ForgID (INCLUDE ForgName) 
C.FuserID (INCLUDE FAREA) 
D.UserID, RoleID 
E.RoleID, RoleName 

これは、すべてあなたのJOIN秒をカバーする、および関連する一切のルックアップはありませんので、結果フィールドはJOINキーでINCLUDE dは - リーフノードは、必要なデータを持っています。

関連する問題