0

我不确定这是 SQL Server 错误还是我的错误,但情况如下:

查询 1

select PK FROM PI_INFORM  WHERE RECORD_DATE>DATEADD(hour,-48, GETDATE())

这需要不到 0.5 秒并返回 20,000 条记录

查询 2

SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"')

这需要不到 1 秒的时间并返回 500 条记录

问题 如果我们用 INTERSECT 连接这两个查询,需要 3 分钟以上。执行计划显示一切都是使用 INDEX SEEK 执行的。

SELECT * FROM PI_INFORM WITH (NOLOCK)
WHERE PK IN (

select PK FROM PI_INFORM  WHERE RECORD_DATE>DATEADD(hour,-48, GETDATE())

INTERSECT

SELECT PK FROM PI_INFORM WHERE PK IN (SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"'))
)
4

1 回答 1

1

以下查询是等效的,应该运行得更快

SELECT * FROM PI_INFORM WITH (NOLOCK)
WHERE 
PK IN (SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"')) AND 
 RECORD_DATE>DATEADD(hour,-48, GETDATE())
于 2012-07-07T13:16:49.470 回答