我在下面有以下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
发生了什么,这没有任何意义。
答案 0 :(得分:2)
尝试使用临时表。表变量仅针对一行进行了优化,并假设它是将要获得的。
了解更多here
答案 1 :(得分:1)
即使它是一个几乎立即执行的简单SELECT,如果你有一个大型数据集,IN将花费更长的时间,因为它将在处理条件之前收集所有数据。使用和EXISTS在它的位置,它很可能运行得更快。
答案 2 :(得分:1)
此行为可能有多种原因。如果没有执行计划,我们只能猜测原因,并且无法确定原因。
由于您在查询中使用DISTINCT ID
,我认为ID
不是主键。您是否可以修改查询以在PK
子句中使用WHERE
。
表Y中的数据可能太大,数百万的数量级,并且由于缺少索引(在表格上)和&存在(在查询中),查询将花费很长时间。
尝试此代码只是为了检查速度
SELECT DISTINCT ID, ParentID
FROM Y WHERE ID IN (3,4)