【问题标题】:TOP 1 or EXISTS - Which is faster?TOP 1 或 EXISTS - 哪个更快?
【发布时间】:2014-04-14 13:57:19
【问题描述】:

我在数据库中有一个表,其中包含近 200 万条记录。我需要确定是否有超过 1 条记录可供客户使用。我有以下两个脚本:

SELECT TOP 1 ex.exceptionId
FROM exception AS ex
WHERE ex.customerId='{1BF87745-DE00-47FF-9AC0-430BAF87679A}'
AND ex.loanId IS NULL
AND ex.statusType = 'required'
AND ex.exceptionState <> 'N'

SELECT (CASE WHEN EXISTS ( SELECT ex.exceptionId FROM exception AS ex
WHERE ex.customerId = '{1BF87745-DE00-47FF-9AC0-430BAF87679A}'
AND ex.loanId IS NULL
AND ex.statusType = 'required'
AND ex.exceptionState <> 'N') THEN 1 ELSE 0
END) AS CustomerExceptionCount

哪个会更快,为什么..?

非常感谢..!

【问题讨论】:

  • 第一个查询不会回答您关于有多少条记录的问题吗?
  • 这些是用作子查询吗?因为他们看起来都不会告诉你你想要什么。
  • 您是否尝试将查询与服务器查询分析器进行比较?
  • 您已经编写了两个查询。为什么不试试看呢?您可以查看执行计划以找出原因。
  • 这些查询都没有回答more than 1 record 的问题。他们都只回答1 or more records

标签: sql sql-server tsql


【解决方案1】:

你不想要类似的东西,

DECLARE @MoreThanOne Bit;

SELECT @MoreThanOne = CASE WHEN count(*) > 1 THEN 1 ELSE 0 END
FROM
(
    SELECT TOP 2 1
    FROM [exception]
    WHERE [customerId] ='{1BF87745-DE00-47FF-9AC0-430BAF87679A}'
       AND [loanId] IS NULL
       AND [statusType] = 'required'
       AND [exceptionState] <> 'N'
) [FirstTwo]

【讨论】:

    【解决方案2】:

    尝试运行这些查询,您将获得查询所花费的时间

    SET STATISTICS TIME ON
    SELECT TOP 1 ex.exceptionId
    FROM exception AS ex
    WHERE ex.customerId='{1BF87745-DE00-47FF-9AC0-430BAF87679A}'
    AND ex.loanId IS NULL
    AND ex.statusType = 'required'
    AND ex.exceptionState <> 'N'
    SET STATISTICS TIME OFF
    GO
    SET STATISTICS TIME ON
    SELECT (CASE WHEN EXISTS ( SELECT ex.exceptionId FROM exception AS ex
    WHERE ex.customerId = '{1BF87745-DE00-47FF-9AC0-430BAF87679A}'
    AND ex.loanId IS NULL
    AND ex.statusType = 'required'
    AND ex.exceptionState <> 'N') THEN 1 ELSE 0
    END) AS CustomerExceptionCount
    SET STATISTICS TIME OFF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多