我不确定这是 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"'))
)