I’m newbie in t-sql, and I wonder why this query executes so long ? Is there any way to optimize this ??
update aggregateflags set value=@value where objecttype=@objecttype and objectcode=@objectcode and storagetype=@storagetype and value != 2 and type=@type
IF @@ROWCOUNT=0
Select * from aggregateflags where objecttype=@objecttype and objectcode=@objectcode and storagetype=@storagetype and value = 2 and type=@type
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
There is not foreign key.
Would be easier to know the structure of
aggregateflagstable — column types and indexes.I would try:
aggregateflags. If not find other matching or create one — matching index for query is the most important thing (checking executing plan can help you).WITH (ROWLOCK)forUPDATEandWITH (NOLOCK)forSELECTstatement — this help to avoid locking editing or reading data.SELECT * FROM aggregateflags...toSELECT TOP 1 1 FROM aggregateflags WITH (NOLOCK)...— you don’t need data — you just need to check if row exists.