我有一个包含超过 10 亿行时间序列数据的表,具有出色的插入性能,但(有时)选择性能很差。
表tblTrendDetails
(PK排序如图):
PK TrendTime datetime
PK CavityId int
PK TrendValueId int
TrendValue real
该表不断地拉入新数据并清除旧数据,因此插入和删除性能需要保持敏捷。
执行如下查询时,性能很差(30 秒):
SELECT *
FROM tblTrendDetails
WHERE TrendTime BETWEEN @inMinTime AND @inMaxTime
AND CavityId = @inCavityId
AND TrendValueId = @inTrendId
如果我再次执行相同的查询(时间相似,但任何@inCavityId
or @inTrendId
),性能非常好(1 秒)。性能计数器显示磁盘访问是第一次运行查询的罪魁祸首。
关于如何在不(显着)对插入或删除性能产生不利影响的情况下提高性能的任何建议?欢迎任何建议(包括完全更改底层数据库)。