Ho una tabella di poco più di 1 miliardo di righe di dati di serie temporali con prestazioni di inserimento fantastiche ma (a volte) prestazioni di selezione terribili.SQL Server: prestazioni dei dati delle serie temporali
Tabella tblTrendDetails
(PK è ordinato come mostrato):
PK TrendTime datetime
PK CavityId int
PK TrendValueId int
TrendValue real
La tabella viene continuamente tirando in nuovi dati e l'eliminazione dei vecchi dati, in modo da inserire ed eliminare prestazioni deve rimanere scattanti.
Quando si esegue una query come la seguente, prestazioni è povero (30 sec):
SELECT *
FROM tblTrendDetails
WHERE TrendTime BETWEEN @inMinTime AND @inMaxTime
AND CavityId = @inCavityId
AND TrendValueId = @inTrendId
Se eseguo la stessa query nuovamente (con tempi simili, ma qualsiasi @inCavityId
o @inTrendId
), la prestazione è molto buono (1 secondo). I contatori delle prestazioni mostrano che l'accesso al disco è il colpevole la prima volta che viene eseguita la query.
Eventuali suggerimenti su come migliorare le prestazioni senza influire negativamente (significativamente) sull'inserimento o sull'eliminazione delle prestazioni? Qualsiasi suggerimento (incluso cambiare completamente il database sottostante) è benvenuto.
Il PK è in cluster? Qualche indice? –
@TimLehner Sì .. PK è in cluster. Nessun (altro) indice. – pilotcam