0

これが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"'))
)
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 に答える