我在 sql server 2008 r2 db 中有一个查询,它是使用 SqlCommand 从 C# 执行的:
SELECT ob.*, ob2.*
FROM Orderbook ob
LEFT JOIN Instruments i ON ob.InstrumentId = i.id AND i.TypeId = 4
LEFT JOIN Instruments i2 ON i.UnderlyingId = i2.id
LEFT JOIN Orderbook ob2 ON ob2.InstrumentId = i2.id AND ob.Moment = ob2.Moment
WHERE /*ob.Moment > @sinceDateTime AND*/ i.CodeId = 9 AND DATEPART(minute, ob.Moment) = 0
ORDER BY ob.Moment
它在 WHERE 子句中使用注释条件运行正常。但是当我取消注释时,我会从服务器超时。这让我感到困惑 - 从时间开始获取记录的查询运行正常,但是当我只想获取今天的记录时,我会超时。有什么建议去哪里看吗?
Orderbook 表在 Moment 字段上具有聚集索引,在 InstrumentId 上具有常规索引。Instruments 表具有 Id 和 UnderlyingId 字段的索引。而且我可以从管理工作室运行这两个查询,所以不能从那里进行太多实验。