SQL Server结合.NET 3.1的时序数据查询性能优化咨询
SQL Server时序数据批量读取性能优化咨询
我正在寻找SQL Server表中存储数据点后,在.NET 3.1应用中批量读取的最优方案。当前使用的表结构如下:
CREATE TABLE [DataPoints]( [Id] [int] NOT NULL, [DateTime] [datetime] NOT NULL, [Value] [decimal](19, 9) NOT NULL, CONSTRAINT [PK_Index] PRIMARY KEY CLUSTERED ( [DateTime] ASC, [Id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
- Id:时序ID
- DateTime:数据时间戳
- Value:时序数据值
当前核心问题是读取性能(数据在夜间存储,写入速度无需保证稳定)。压力测试显示,读取5年数据、涉及至少500个时序ID的1.6亿条记录,平均耗时约7分30秒。
我使用Entity Framework进行数据检索,已尝试两种方式:
- 逐个查询时序ID(耗时7分20秒-7分40秒)
var dataPoints = context.DataPoints .AsNoTracking() .AsQueryable() .Where(dataPoint => dataPoint.id == id && dataPoint.DateTimeUtc >= startDate && dataPoint.DateTimeUtc <= endDate);
- 一次性包含所有ID查询(耗时7分30秒-8分10秒)
List<int> ids = new List<int>() {1, 2, 3, 4, .... 498, 499, 500 }; var dataPoints = context.DataPoints .AsNoTracking() .AsQueryable() .Where(dataPoint => ids.Contains(dataPoint.Id) && dataPoint.DateTimeUtc >= startDate && dataPoint.DateTimeUtc <= endDate);
我想了解在现有SQL Server环境下,是否存在更优的读取方案以提升查询速度。此前已了解InfluxDB、Timescale、MongoDB,但希望先确认现有数据库能否满足需求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

