【发布时间】:2019-07-03 17:24:05
【问题描述】:
我有一个流程需要知道表上是否有 1 个符合各种标准的匹配项。我可以通过一个简单的查询来获得计数,但我希望我可以优化它,因为我不在乎是否有 2 个匹配项或 2000 个匹配项。一旦我知道我有超过 1 个查询就可以停止。
“TOP 2”不适用于“COUNT”,因为它只返回 1 个结果,而不管它计算了多少。我正在查询的表上没有任何索引(也无法控制),所以我不希望能够使用循环和游标获得更好的结果。子查询也至少会执行 1 个完整查询。我已经没有选择了吗?我应该研究自定义聚合函数吗?
--Just a generic example. Only interested in knowing if @NumPerson = 1
DECLARE @NumPerson int
SELECT @NumPerson = COUNT(id) FROM Person
WHERE vchLastName = <Last Name,varchar,>
AND vchFirstName = <First Name,varchar,>
我并不期望获得巨大的收益,但我们使用的查询已经足够我想确保它被拨入。
【问题讨论】:
-
使用 EXISTS,它的性能会比 count 好
-
@FLICKER
Exists在检查是否存在满足某些条件的 一个 或多个行时比Count更有效。您如何建议使用它来检查 两个 或更多行? -
如果
Person在vchLastName和vchFirstName上具有单个 索引,则应快速识别所需的行。如果您查询top (2) Id并检查@@RowCount,您将得到答案:0、1或2(表示两个或更多)。这是order by无关紧要的罕见情况之一。 -
看起来不错!谢谢!
-
你尝试过exists、count(*)和have的组合吗?
标签: tsql count query-optimization