2010-05-10 6 views
0

Je suis novice en t-sql, et je me demande pourquoi cette requête s'exécute si longtemps? Y a-t-il un moyen d'optimiser cela?Optimisation t-sql requête

update aggregateflags set [email protected] where [email protected] and [email protected] and [email protected] and value != 2 and [email protected] 
IF @@ROWCOUNT=0 
Select * from aggregateflags where [email protected] and [email protected] and [email protected] and value = 2 and [email protected] 
IF @@ROWCOUNT=0 
insert into aggregateflags (objectcode,objecttype,value,type,storagetype) 
select @objectcode,@objecttype,@value,@type,@storagetype 

@value int 
@storagetype int 
@type int 
@objectcode nvarchar(100) 
@objecttype int 

Il n'y a pas de clé étrangère.

Répondre

1

Serait plus facile de connaître la structure de aggregateflags types de table-colonne et indices.

Je voudrais essayer:

  1. Vérifiez s'il y a index correspondant sur la table aggregateflags. Si vous ne trouvez pas d'autre correspondant ou créez un - index correspondant pour la requête est la chose la plus importante (vérifier executing plan peut vous aider).
  2. Ajouter hints (si vous pouvez) WITH (ROWLOCK) pour UPDATE et WITH (NOLOCK) pour SELECT déclaration - cette aide pour éviter de modifier le verrouillage ou la lecture des données.
  3. Remplacez SELECT * FROM aggregateflags... par SELECT TOP 1 1 FROM aggregateflags WITH (NOLOCK)... - vous n'avez pas besoin de données - vous avez juste besoin de vérifier si la ligne existe.
0

Assurez-vous que les index sont définis sur vos colonnes. Si cela ne vous aide pas, utilisez le bouton "Afficher le plan d'exécution" dans SQL Studio et vérifiez ce qui ne va pas.