SQL";“是否存在记录”;

SQL";“是否存在记录”;,sql,Sql,如果只想在某一行存在时执行代码,那么检查该行是否存在的正确方法是什么?以前,我使用了不同的方法,很少考虑整体性能。。。想知道这两种替代方法之间是否存在显著差异 IF EXISTS (SELECT * FROM MYTABLE WHERE...) IF (SELECT COUNT(*) FROM MYTABLE WHERE...) > 0 有没有比以上更好的方法 也许有人可以提供推荐的方法,以及为什么该方法比其他方法更好?dbms足够聪明,知道他不需要从EXISTS子句中检索任何内容 对

如果只想在某一行存在时执行代码,那么检查该行是否存在的正确方法是什么?以前,我使用了不同的方法,很少考虑整体性能。。。想知道这两种替代方法之间是否存在显著差异

IF EXISTS (SELECT * FROM MYTABLE WHERE...)

IF (SELECT COUNT(*) FROM MYTABLE WHERE...) > 0
有没有比以上更好的方法


也许有人可以提供推荐的方法,以及为什么该方法比其他方法更好?

dbms足够聪明,知道他不需要从EXISTS子句中检索任何内容

对于用户来说,一种可能古老但通常的显式方式(但不会更改执行计划的任何内容)是使用

if exists (select null from) --or select 1 from
但是

同样的道理


与第二个版本相比,
EXISTS
子句更能说明您想要实现的目标。

从性能方面来说,
EXISTS
方法更好。当遇到第一条匹配的记录时,它可以停止处理基础表/查询

count(*)
方法必须实际生成记录数,因此需要完成底层表扫描/查询。然后,它还必须进行聚合

是的,它们之间可能存在显著的性能差异。假设您有一个包含1亿行的表,您可以:

if exists (select 1 from table t)
这几乎会在瞬间返回

if (select count(*) from table t)
必须做一次全桌扫描,所以出去喝杯咖啡


使用
存在

如果只想知道行是否存在,为什么要计算行数?因此,即使执行计划相同,第一种方法也更具可读性。但这个答案是否使用
EXISTS
COUNT
来比较这两种方法?@TimSchmelter now bit;)但是是的,我先错过了一些东西。
if (select count(*) from table t)