优化t-sql查询

时间:2010-05-10 13:25:16

标签: tsql optimization

我是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

没有外键。

2 个答案:

答案 0 :(得分:1)

更容易了解aggregateflags表格 - 列类型和索引的结构。

我会尝试:

  1. 检查表格aggregateflags上是否有匹配索引。如果没有找到其他匹配或创建一个 - 匹配索引的查询是最重要的(检查 executing plan 可以帮助你)。
  2. WITH (ROWLOCK)添加 hints (如果可以)UPDATE,为WITH (NOLOCK)语句添加SELECT - 这有助于避免锁定编辑或读取数据。
  3. SELECT * FROM aggregateflags...更改为SELECT TOP 1 1 FROM aggregateflags WITH (NOLOCK)... - 您不需要数据 - 您只需要检查行是否存在

答案 1 :(得分:0)

确保在列上定义了索引。如果这没有帮助,请使用SQL studio中的“显示执行计划”按钮并检查错误。