发现对这个非常大的表(约1亿条记录)的查询效率低下(通常是20-30秒,但可能更多),但不知道该怎么办:
SELECT @TRXCOUNT = count(1)
FROM inbound.[Transaction] WITH (NOLOCK)
WHERE CreatedTimeStamp BETWEEN DATEADD(HH, - 1, SYSDATETIME()) AND SYSDATETIME()
执行计划显示Index Scan(NonClustered)成本93%
答案 0 :(得分:3)
从您的评论中可以看出,您没有基于CreatedTimeStamp
的索引。将其包含在另一个索引中并不能提高查询效率 - 目前仍需要进行表扫描。
我建议你添加一个新索引(例如名为IX_Inbound_Transaction_CreatedTimeStamp
)。它不需要聚集,因为索引是所有查询都需要查看的。
答案 1 :(得分:1)
你云尝试两件事:
答案 2 :(得分:1)
大于可能比BETWEEN更快。
SELECT @TRXCOUNT = count(1)
FROM inbound.[Transaction] WITH (NOLOCK)
WHERE CreatedTimeStamp > SYSDATETIME() - INTERVAL 30 MINUTE
语法可能不准确。 mySQL vs SQL