相关疑难解决方法(0)

使用存在1或存在的子查询*

我以前写这样的EXISTS检查:

IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

前一个DBA中的一个告诉我,当我做一个EXISTS条款时,请使用SELECT 1而不是SELECT *

IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

这真的有所作为吗?

sql t-sql sql-server

84
推荐指数
4
解决办法
2万
查看次数

添加条件查询会使时间增加超过2400%

更新:我会尽快得到查询计划.

我们的查询效果不佳,需要4分钟才能完成特定组织.在通常的重新编译之后,存储的proc和更新统计信息没有帮助,我们将if Exists(...)重写为select count(*)...以及4分钟到70毫秒的存储过程.条件使得70毫秒查询需要4分钟的问题是什么?查看示例

这些都需要4分钟以上:

if (
  SELECT COUNT(*)       
    FROM ObservationOrganism  omo
    JOIN Observation          om  ON  om.ObservationID  = omo.ObservationMicID
    JOIN Organism             o   ON  o.OrganismID      = omo.OrganismID
    JOIN ObservationMicDrug   omd ON  omd.ObservationOrganismID = omo.ObservationOrganismID
    JOIN SIRN                 srn ON  srn.SIRNID        = omd.SIRNID
    JOIN OrganismDrug         od  ON  od.OrganismDrugID = omd.OrganismDrugID
  WHERE
    om.StatusCode IN ('F', 'C')
    AND o.OrganismGroupID <> -1
    AND od.OrganismDrugGroupID <> -1
    AND (om.LabType <> 'screen' OR om.LabType IS NULL)) > 0

print 'records';       
Run Code Online (Sandbox Code Playgroud)

-

IF (EXISTS(
  SELECT *       
    FROM ObservationOrganism  omo …
Run Code Online (Sandbox Code Playgroud)

sql-server

5
推荐指数
1
解决办法
122
查看次数

标签 统计

sql-server ×2

sql ×1

t-sql ×1