小编Eri*_*son的帖子

"SELECT TOP 1 1"VS"IF EXISTS(SELECT 1"

我有一些.NET代码,它以适度高的间隔检查是否存在SQL记录.我希望这个检查尽可能"便宜".

我想知道两个查询的特征:

IF EXISTS(SELECT 1
          FROM   BigTable
          WHERE  SomeColumn = 200)
  SELECT 1 AS FOUND
ELSE
  SELECT 0 AS FOUND
Run Code Online (Sandbox Code Playgroud)

VS

SELECT TOP 1 1
FROM   BigTable
WHERE  SomeColumn = 200 
Run Code Online (Sandbox Code Playgroud)

他们都制定了类似的执行计划.但是SELECT TOP 1 1似乎执行得更快:解析查询次数越少,找不到记录时,它就会减少管道传输量.我也假设它在客户端运行得更快,因为我只需要检查记录计数,而不是整理IF EXISTS的返回值.

大多数性能优势可以忽略不计.但如果两者始终返回相同的结果,那么为什么不选择快的方法?

"SELECT TOP 1 1"是检查.NET中是否存在记录的最佳方法吗?

(我们使用.NET 3.5,我试图避免LINQ,因为它没有在应用程序的其他地方使用.我们还有一些我们正在迁移/重写的遗留VB6应用程序,所以他们可能也需要执行它.)

编辑:更多关于设计的细节.此记录是"标题".还有另一个表具有子记录,当找到此标头时将对其进行读取/解析.缺乏记录是件好事:没有工作要做.

编辑2:缺乏满足条件的记录将更频繁地发生.它们来自零星的波浪.

.net sql-server

41
推荐指数
3
解决办法
3万
查看次数

标签 统计

.net ×1

sql-server ×1