gpt4 book ai didi

.net - "SELECT TOP 1 1"VS "IF EXISTS(SELECT 1"

转载 作者:行者123 更新时间:2023-12-01 18:31:00 46 4
gpt4 key购买 nike

我有一些 .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 应用程序,因此它们可能也需要执行它.)

编辑:只是设计上有更多细节。该记录是一个“标题”。还有另一个表具有子记录,当找到此 header 时将读取/解析这些子记录。没有记录是一件好事:没有工作可做。

EDIT2:缺少满足条件的记录的情况会更频繁地发生。他们零星地涌来。

最佳答案

我建议使用IF EXISTS(SELECT * ...),除非这实际上会导致性能问题。它以比替代方案更好理解的方式表达了查询的意图

我会避免使用 COUNT(*) (如当前答案中所示),除非您实际上需要表中的行数。

如果您想要从结果中检查行数的“效率”,我可能会选择:

select 1 where exists(select * from BigTable where SomeColumn=200)

这会产生与第二个查询相同的结果集(0 或 1 行)

关于.net - "SELECT TOP 1 1"VS "IF EXISTS(SELECT 1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009022/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com