我有一些 .NET 代码以适中的间隔检查是否存在 SQL 记录。我希望让这张支票尽可能“便宜”。
我想知道两个查询的特征:
IF EXISTS(SELECT 1
FROM BigTable
WHERE SomeColumn = 200)
SELECT 1 AS FOUND
ELSE
SELECT 0 AS FOUND
VS
SELECT TOP 1 1
FROM BigTable
WHERE SomeColumn = 200
它们都产生相似的执行计划。但是 SELECT TOP 1 1 似乎执行得更快:要解析的查询更少,当找不到记录时,它发送的管道更少。我还假设它在客户端运行得更快,因为我只需要检查记录计数,而不是编组 IF EXISTS 的返回值。
大多数性能优势都可以忽略不计。但是,如果两者始终返回相同的结果,那么为什么不选择稍微快一点的方法呢?
“SELECT TOP 1 1”是检查 .NET 中是否存在记录的最佳方式吗?
(我们使用 .NET 3.5,我试图避免使用 LINQ,因为它没有在应用程序的其他地方使用。我们还有一些正在迁移/重写的遗留 VB6 应用程序,因此它们可能也需要执行此操作。)
编辑:关于设计的更多细节。该记录是一个“标题”。当找到此标头时,还有另一个包含子记录的表将被读取/解析。没有记录是一件好事:没有工作要做。
EDIT2:缺少满足条件的记录会更频繁地发生。他们以零星的浪潮出现。