【发布时间】:2023-04-08 11:16:01
【问题描述】:
我有一个包含超过 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 或@inTrendId),性能非常好(1 秒)。性能计数器显示磁盘访问是第一次运行查询的罪魁祸首。
关于如何在不(显着)对插入或删除性能产生不利影响的情况下提高性能的任何建议?欢迎提出任何建议(包括完全更改底层数据库)。
【问题讨论】:
-
PK是否集群?有索引吗?
-
@TimLehner 是的.. PK 是集群的。没有(其他)索引。
标签: sql-server performance sql-server-2000 time-series