Tôi có một bảng gồm hơn 1 tỷ hàng dữ liệu chuỗi thời gian với hiệu suất chèn tuyệt vời nhưng (đôi khi) hiệu suất chọn khủng khiếp.Máy chủ SQL: hiệu suất dữ liệu chuỗi thời gian
Bảng tblTrendDetails
(PK được ra lệnh như hình):
PK TrendTime datetime
PK CavityId int
PK TrendValueId int
TrendValue real
Bảng này được liên tục kéo trong dữ liệu mới và thanh lọc dữ liệu cũ, vì vậy chèn và xóa hiệu suất cần để duy trì snappy.
Khi thực hiện một truy vấn như sau, hiệu suất là nghèo (30 giây):
SELECT *
FROM tblTrendDetails
WHERE TrendTime BETWEEN @inMinTime AND @inMaxTime
AND CavityId = @inCavityId
AND TrendValueId = @inTrendId
Nếu tôi thực hiện cùng một truy vấn một lần nữa (với thời gian tương tự, nhưng bất kỳ @inCavityId
hoặc @inTrendId
), hiệu suất là rất tốt (1 giây) Bộ đếm hiệu suất cho thấy rằng truy cập đĩa là thủ phạm lần đầu tiên truy vấn được chạy.
Bất kỳ đề xuất nào về cách cải thiện hiệu suất mà không (đáng kể) ảnh hưởng xấu đến hiệu suất chèn hoặc xóa? Bất kỳ đề xuất nào (bao gồm thay đổi hoàn toàn cơ sở dữ liệu cơ bản) đều được hoan nghênh.
PK có được nhóm không? Bất kỳ chỉ mục nào? –
@TimLehner Có .. PK được nhóm lại. Không có (khác) chỉ mục. – pilotcam