これがSQLServerのバグなのか、私の間違いなのかはわかりませんが、状況は次のとおりです。
QUERY 1
select PK FROM PI_INFORM WHERE RECORD_DATE>DATEADD(hour,-48, GETDATE())
これには0.5秒もかからず、20,000レコードが返されます
QUERY 2
SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"')
これには1秒もかからず、500レコードが返されます
問題 これら2つのクエリをINTERSECTで結合すると、3分以上かかります。実行プランは、すべてがINDEXSEEKを使用して実行されることを示しています。
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"'))
)