【问题标题】:SQL hangs when using SELECT DISTINCT使用 SELECT DISTINCT 时 SQL 挂起
【发布时间】:2016-10-10 15:09:06
【问题描述】:

当我尝试从链接表运行简单的 Select Distinct 查询时,SQL 服务器挂起。 “正在执行查询。等待数据源的响应。”然后返回错误:Timeout expired。在操作完成之前超时时间已过或服务器没有响应。

SELECT DISTINCT UR_RISK_ID AS [Risk ID]
FROM         FWLIVE..LMDATA.UDS_RISK

没有“distinct”就可以了,而且跑的很快。

有什么想法吗?

【问题讨论】:

标签: sql-server distinct


【解决方案1】:

select distinct 本质上等同于:

SELECT UR_RISK_ID AS [Risk ID]
FROM FWLIVE..LMDATA.UDS_RISK
GROUP BY UR_RISK_ID;

换句话说,引擎必须做很多工作才能删除重复项。我建议在UDS_RISK(UR_RISK_ID) 上创建一个索引,以便该索引可用于查询。

我还应该注意SELECT 可以在遇到行时开始返回行。 SELECT DISTINCT 需要在返回任何行之前处理所有数据。如果您在表中有一个唯一的 id,那么可能还有其他选项可以更快地返回一些行。

【讨论】:

  • 这会更好吗select * from (select row_number().. from ) a where rn = 1 只是好奇
  • 我希望select distinct 更快,因为引擎会(可能)将rn 分配给每一行,然后进行过滤。 distinct 只会过滤。但是,SQL Server 可能有优化,所以两者本质上是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2021-11-18
  • 2018-04-28
相关资源
最近更新 更多