我有一张超过10亿行时间序列数据的表格,具有出色的插入性能,但(有时)可怕的选择性能.
表tblTrendDetails(PK如图所示排序):
PK TrendTime datetime
PK CavityId int
PK TrendValueId int
TrendValue real
Run Code Online (Sandbox Code Playgroud)
该表不断提取新数据并清除旧数据,因此插入和删除性能需要保持活泼.
执行如下查询时,性能很差(30秒):
SELECT *
FROM tblTrendDetails
WHERE TrendTime BETWEEN @inMinTime AND @inMaxTime
AND CavityId = @inCavityId
AND TrendValueId = @inTrendId
Run Code Online (Sandbox Code Playgroud)
如果我再次执行相同的查询(有相似的时间,但任何@inCavityId或者@inTrendId),性能非常好(1秒).性能计数器显示磁盘访问是第一次运行查询时的罪魁祸首.
有关如何在不显着影响插入或删除性能的情况下提高性能的任何建议?任何建议(包括完全更改底层数据库)都是受欢迎的.
我正面临着2D指针数组的问题.它编译没有错误,但是当我尝试运行文件时,我得到的只是一行说我有一个分段错误.
我的头文件:
#ifndef __TWODARRAY_H__
#define __TWODARRAY_H__
template <typename T>
class TwoDArray {
private:
T** theArray;
int numRows;
int numCols;
T defSpace;
public:
TwoDArray<T> (int r, int c, T def);
~TwoDArray<T>();
void insert(int r, int c, T value);
T access(int r, int c);
void remove(int r, int c);
void print();
int getNumRows();
int getNumCols();
};
#endif
Run Code Online (Sandbox Code Playgroud)
我的方法:
#include "TwoDArray.h"
#include <iostream>
#include <assert.h>
#include <string>
//initializes the 2D Array
template <typename T>
TwoDArray<T>::TwoDArray(int r, int c, T def) {
assert(r > …Run Code Online (Sandbox Code Playgroud)