我有一个这样的查询:
SELECT TOP(1)
CASE WHEN COUNT(Example_ID) > 0 THEN 1 ELSE 0 END AS 'Exists'
FROM Example
WHERE Example_ID IS NULL
;
我的问题是,如果我使用聚合,它将从整个表中获得数据,但如果我使用标准查询,即:
SELECT TOP(1)
1 AS 'Exists'
FROM Example
WHERE Example_ID > 0
;
它会在第一个找到的地方停下来吗?哪一个有更多的优化?
看到两个查询都有一个TOP 1
子句来回答性能,这实际上取决于评估查询计划。
数据和索引会影响性能,因此在执行时,答案非常特定于您的数据集。
如果Example_ID
大部分是而不是null,则第二个查询可能会执行得更快,因为在表扫描中达到null值的可能性较小,除非Example_ID
上有索引,否则如果索引按升序排序,则第一个查询应在第二个询问之前完成。
SELECT
子句中的字段和表达式在很大程度上与本讨论无关,尽管一旦过滤了结果集,最接近原始形式的查询可能会更快地返回。
在SQL性能问题中,我们总是建议提供执行计划,我们可以帮助解释为什么会发生这种情况以及如何改进它。