我正在尝试在每天接收数百万条记录的表上编写查询。我可以将查询缩小到一个时间片 ( logdate),但我需要其中的其他列数据 ( num)。这是我用来测试它的示例查询:
DECLARE @StartTimeStamp DATETIME = '12/6/2019 7:56:50.799'
DECLARE @EndTimeStamp DATETIME = '12/6/2019 7:56:50.8'
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT tx.num, tx.logdate
FROM hsi.transactionxlog tx
WHERE tx.logdate BETWEEN @StartTimeStamp AND @EndTimeStamp
此特定测试的时间跨度为 0.001 秒,运行时间超过四分钟。如果我将其更改为在指定时间范围内未找到任何记录的时间范围,则运行几乎可能需要一秒钟,甚至指定 24 小时的跨度。
该表只有非聚集索引。一个这样的索引num中包含以下列:(按顺序排列)。logdateaction
如何num快速找到@StartTimeStamp 和@EndTimeStamp 之间每条记录的对应关系?我强烈不想在这个表上创建额外的索引,因为许多其他应用程序经常使用它。