1

我在下面有以下 SQL 代码。完成需要很长时间,但如果我只运行SELECT DISTINCT ID, ParentID FROM Y WHERE ID IN (3,4),它会立即完成。

DECLARE @table TABLE
(
  ID int,
  ParentID int
)

INSERT INTO @table 
SELECT DISTINCT ID, ParentID FROM Y WHERE ID IN (3,4)

SELECT * FROM @table

这是怎么回事,这毫无意义。

4

3 回答 3

2

尝试改用临时表。表变量仅针对一行进行了优化,并假设这就是它将得到的。

在这里阅读更多

于 2012-11-08T06:07:45.343 回答
1

尽管它是一个几乎可以立即执行的简单 SELECT,但如果您有一个大型数据集,IN 将花费更长的时间,因为它会在处理条件之前收集所有数据。在它的位置使用并存在,它很可能会运行得更快。

于 2012-11-08T01:45:45.853 回答
1

这种行为可能有多种原因。如果没有执行计划,我们只能猜测原因,不能确定确切的原因。

  1. 由于您DISTINCT ID在查询中使用,我假设这ID不是主键。您可以修改查询以PKWHERE子句中使用吗?

  2. 可能是Y表的数据太大,几百万的量级,由于缺少if indexing(on the table) & Exists(in the query),查询时间会比较长。

  3. 试试这个代码只是为了检查速度

    SELECT DISTINCT ID, ParentID
    FROM Y WHERE ID IN (3,4)
    
于 2012-11-08T03:37:53.590 回答