查询固定值和表之间的性能差异

时间:2015-06-04 21:33:22

标签: sql-server query-optimization

以下查询在不到1秒的时间内返回结果:

SELECT DISTINCT IndicatorID
FROM dbo.tblData
WHERE tblData.RevisionID in (1)

以下查询产生相同的结果,但至少需要5秒才能返回:

DECLARE @Revisions AS TABLE
(
    number INT PRIMARY KEY
)
INSERT INTO @Revisions
SELECT 1

SELECT DISTINCT IndicatorID
FROM dbo.tblData
WHERE tblData.RevisionID in (SELECT number FROM @Revisions)

这是我所拥有的场景的一个例子。

执行JOIN没有任何区别。 使用临时表(#)并创建UNIQUE INDEX也没有区别。

我想问题不在tblData中,因为使用固定值' 1'它运行得非常快。

执行计划: Execution Plan

更新: 仅包含RevisionID的索引的执行计划: Execution Plan with IX RevisionID

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我检查一下:

  1. tblData.RevisionID的数据类型是什么。确保它与你的号码相同' field(INT)。
  2. 我假设索引tblData.IX_IndicatorRevision是一个复合索引,其中RevisionID作为第二个字段。在RevisionID上创建一个索引,以避免根据执行计划进行索引扫描,这是最糟糕的攻击者。