我有一些.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 的返回值。大多数性能优势都微不足道。但如果两者始终返回相同的结果,那么为什么不选择稍微更快的方法呢?
".NET 中检查记录存在的最佳方法是"SELECT TOP 1 1"吗?
(我们使用 .NET 3.5,并且我正在尝试避免使用 LINQ,因为它在应用程序中没有被使用。我们还有一些需要迁移/重写的旧 VB6 应用程序,所以它们可能也需要执行此操作。)
编辑: 设计上再补充一点。这个记录是一个“头部”。当找到这个头部时,会读取/解析另一个具有子记录的表。缺少记录是一件好事:没有工作要做。
编辑2:不符合条件的记录缺失情况会更频繁出现,他们会以间歇性波动的方式出现。
SELECT TOP 1 1 FROM BigTable WHERE 1 = 0
。 - Preet Sanghaselect top 1 1
,实际上,可读性对于维护和其他人阅读你的代码非常重要... - serhio