SQL Server Where子句
使用多个where语句运行select查询时(在SQL SERVER 2000+上),例如SQL Server Where子句,sql,sql-server,Sql,Sql Server,使用多个where语句运行select查询时(在SQL SERVER 2000+上),例如 SELECT * FROM TABLE1 WHERE TableId = @TableId AND Column1 = @Column1 AND Column2 = @Column2 AND Column3 = @Column3 etc. …即使第一个where子句不相等,查询是否也会计算每个where子句?我有
SELECT *
FROM TABLE1
WHERE TableId = @TableId
AND Column1 = @Column1
AND Column2 = @Column2
AND Column3 = @Column3 etc.
…即使第一个where子句不相等,查询是否也会计算每个where子句?我有一个查询,在更新之前检查每一列,看看是否有任何更改(即,只有在有更改时才会更新)。如果查询比较了每一列,那么我想我需要重写查询。但是,如果查询引擎首先过滤到ID列,然后在该过滤集中单独比较每一列,那么性能应该是良好的(我会认为是这样的)
我希望这是有道理的
谢谢,
詹姆斯。不
查询引擎得到了很好的优化。否
查询引擎得到了很好的优化。根据统计数据和可用索引,优化者将估计计算查询的最佳顺序。大多数情况下,它是正确的,但也可能被过时的统计数据所抛弃
您不应该关心WHERE子句的顺序。相反,请查看为查询创建的实际执行计划。根据统计数据和可用索引,优化人员将估计计算查询的最佳顺序。大多数情况下,它是正确的,但也可能被过时的统计数据所抛弃
您不应该关心WHERE子句的顺序。相反,请看一看为查询创建的实际执行计划。为什么要用以下命令两次命中数据:
--did data change?
if exists (select ... where pk=@pk and and and...)
begin
update ... where pk=@pk
end
update ... where pk=@pk and and and...
只需做如下操作:
--did data change?
if exists (select ... where pk=@pk and and and...)
begin
update ... where pk=@pk
end
update ... where pk=@pk and and and...
如果您需要知道它是否实际更改和更新了,可以检查@@ROWCOUNT为什么要用类似以下内容的命令两次命中数据:
--did data change?
if exists (select ... where pk=@pk and and and...)
begin
update ... where pk=@pk
end
update ... where pk=@pk and and and...
只需做如下操作:
--did data change?
if exists (select ... where pk=@pk and and and...)
begin
update ... where pk=@pk
end
update ... where pk=@pk and and and...
您可以检查@@ROWCOUNT,如果您需要知道它是否实际更改和更新了我不知道在您的情况下是否可以这样做,但请尝试以下方法: 在正在查看的表/数据集上,创建LastModified datetime default getdate()列。然后创建一个触发器以更新该表。让触发器执行以下操作 更新 set LastModified=getdate() 这是一个很好的数据库设计,您可以为LastModified列编制索引。这是一个要维护的较窄索引,您的查询现在可以
UPDATE... WHERE LastModifed >= @LastRunDate
有关触发器的帮助,请尝试此堆栈溢出线程:我不知道在您的情况下是否可以这样做,但请尝试以下操作: 在正在查看的表/数据集上,创建LastModified datetime default getdate()列。然后创建一个触发器以更新该表。让触发器执行以下操作 更新 set LastModified=getdate() 这是一个很好的数据库设计,您可以为LastModified列编制索引。这是一个要维护的较窄索引,您的查询现在可以
UPDATE... WHERE LastModifed >= @LastRunDate
有关触发器的帮助,请尝试此堆栈溢出线程:谢谢。我最终以不同的方式修改了我的查询,但我感谢您的建议。谢谢。我最终以不同的方式修改了我的查询,但我感谢您的建议。