在阅读一些SQL调优相关文档时,我发现了这个:

选择计数(*):

计算行数。 通常不恰当地用于验证记录的存在。

SELECT COUNT(*)真的那么糟糕吗?

验证记录存在的正确方法是什么?


当前回答

你可以使用:

SELECT 1 FROM MyTable WHERE <MyCondition>

如果没有与条件匹配的记录,则结果记录集为空。

其他回答

你可以使用:

SELECT 1 FROM MyTable WHERE <MyCondition>

如果没有与条件匹配的记录,则结果记录集为空。

你可以使用:

SELECT 1 FROM MyTable WHERE... LIMIT 1

使用select 1防止检查不必要的字段。

使用LIMIT 1防止检查不必要的行。

其他答案都很好,但是添加LIMIT 1(或等价的,以防止检查不必要的行)也会很有用。

SELECT COUNT(1) FROM MyTable WHERE ...

将遍历所有记录。这就是它不适合用于记录存在的原因。

我会用

SELECT TOP 1 * FROM MyTable WHERE ...

在找到一条记录后,它将终止循环。

其他选项:

SELECT CASE
    WHEN EXISTS (
        SELECT 1
        FROM [MyTable] AS [MyRecord])
    THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END