2011-07-22 2 views
1

Comment créer par dépendent de cette instruction select.Sur quelle (s) colonne (s) dois-je créer un index?

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' 

Il est juste de créer comme ceci ??

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

Vous voulez certainement aussi avoir des indices sur toutes les colonnes de clé étrangère dans vos tables. –

+3

J'espère que celui qui a créé la convention que toutes les colonnes (champs parfois improprement) doivent avoir des noms commençant par 'f' voit maintenant l'inutilité d'une telle convention ... –

+5

@Damien FI fdon't fthink fyou funderstand fthe frequirement, fthen! – JNK

Répondre

0

Vous voulez sans doute cet indice:

create index index_B on aspnet_Roles(RoleName) 
+0

je veux dire à partir de cette déclaration select ... avec combiner plusieurs tables.how to do index. ou j'ai besoin de créer un par un index pour chaque table impliquée ??? s'il vous plaît me guider ... – helmi

+0

est que l'indice dépend de la clause where ??? – helmi

+1

@helmi Non, je pense que vous avez mal compris comment les index sont utilisés. D'abord vous les créez dans votre base de données. Ensuite, sql-server l'utilisera dès qu'il le pourra, c'est-à-dire lorsqu'il y aura une requête qui en bénéficiera. –

2

Voici une liste des index suggérés avec colonnes incluses.

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

Cela couvrira tous vos JOIN s, et les champs de résultats sont INCLUDE d avec les touches JOIN donc il n'y a pas de recherche impliqués - le nœud feuille aura les données dont vous avez besoin.

Questions connexes