2011-07-22 41 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 fdon't fthink fyou fun understand the frequirement,fthen! – JNK

回答

0

你可能想要這個指數:

create index index_B on aspnet_Roles(RoleName) 
+0

我的意思是從那個select語句...結合多個table.how來做索引。或者我需要爲涉及的每個表創建一個索引?請指導我... – helmi

+0

是索引取決於where子句? – helmi

+1

@helmi不,我認爲你誤解了如何使用索引。首先在數據庫中創建它們。然後sql-server會在任何時候使用它,即當有一個查詢會從中受益時。 –

2

下面是與包括列建議索引列表。

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

這將滿足你的所有JOIN秒,結果字段INCLUDE d與JOIN鍵,因此沒有參與查找 - 葉節點將有你需要的數據。

相關問題