我是t-sql的新手,我想知道为什么这个查询执行这么久?有没有办法优化这个?
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
没有外键。
答案 0 :(得分:1)
更容易了解aggregateflags
表格 - 列类型和索引的结构。
我会尝试:
aggregateflags
上是否有匹配索引。如果没有找到其他匹配或创建一个 - 匹配索引的查询是最重要的(检查 executing plan 可以帮助你)。WITH (ROWLOCK)
添加 hints (如果可以)UPDATE
,为WITH (NOLOCK)
语句添加SELECT
- 这有助于避免锁定编辑或读取数据。SELECT * FROM aggregateflags...
更改为SELECT TOP 1 1 FROM aggregateflags WITH (NOLOCK)...
- 您不需要数据 - 您只需要检查行是否存在。答案 1 :(得分:0)
确保在列上定义了索引。如果这没有帮助,请使用SQL studio中的“显示执行计划”按钮并检查错误。