【发布时间】:2010-10-21 14:00:21
【问题描述】:
在 SQL 中检查 NULL 或 0 的值更快的是什么
我想用最快的方法检查表中是否已经存在值。
例如哪个更快:
IF ((SELECT ID FROM [SomeTable].[dbo].[BlockedSubscriberNumbers]
WHERE VALUE = @myVal) is null )
BEGIN
....
END
ELSE
BEGIN
....
END
或
IF ((SELECT COUNT(ID) FROM [SomeTable].[dbo].[BlockedSubscriberNumbers]
WHERE VALUE = @myVal) > 0 )
BEGIN
....
END
ELSE
BEGIN
....
END
在 T-SQL 中也扮演着频繁累积案例必须出现的角色。我的意思是它会更快,在大多数情况下它会失败进入 IF 块,如果它主要进入 ELSE 会更慢。
【问题讨论】:
-
这是两个不同的查询,会返回不同的结果。
-
这可能是个好消息,但请记住过早的优化是万恶之源。这两种方式都可以工作,具体取决于您的要求。选一个。 任何一种方法都绝对不是你的性能问题(如果你有一个开始的话)。
-
您是否保证您的选择将始终返回 0 或 1 个结果?如果查询返回超过 1 行,您将收到错误消息。
-
@Joe ID 为主键,不能有多个值。
-
@Incognito:如果你告诉我 VALUE 是主键,我会没事的。我仍然看到 VALUE=@myVal 可能适用于多个 ID。
标签: sql sql-server database tsql