我SQLServer建了一个库,让后在程序中向其不停的插入数据,我发现随着数据
量增加的话,SQLServer占用的内存会增加,当我的向数据库中插入几百万条记录后,发现它既然占用了一百多兆的内存!!
请问这是什么原因,如果是这样的话,当数据达到一定量的时候,系统的内存都会 被它用尽了。可以有办法解决这个问题吗??
量增加的话,SQLServer占用的内存会增加,当我的向数据库中插入几百万条记录后,发现它既然占用了一百多兆的内存!!
请问这是什么原因,如果是这样的话,当数据达到一定量的时候,系统的内存都会 被它用尽了。可以有办法解决这个问题吗??
三、根据程序调用频次要求特别是数据统计报表等的要求,建立索引(这里建得好不好,就是速度好不好的主要原因了)。
四、不要将全部工作交给sql语句来做。特别是多表联合访问时更是这样,sql语句运行时第一步就是生成调用表的笛卡尔积,举个例子:比如你有两张表,各有记录10000条,表一是员工姓名,表二是员工工资。 当用联合查询时,笛卡尔积就是10000×10000=1亿。程序相当于是要在1亿条记录的集合里查找。 (注:有些朋友认为他已经通过where子句对数据进行了选择,所以问题没那么大,其实这是不对的,sql标准里是先生成笛卡尔积,然后才进行筛选的)。
不知道你是不是这个原因五、程序中要重复利用可用的内存数据集。比如你有五个模块要调用表一, 如果你用五个数据集控件,那程序里就要初始化五次,当你数据集比较大时, 结果就知道了吧。所以写程序时,对一些常用的数据表或是查询,最好放在连接池中来管理 (cb中可以用datamodel)来代替。
六、优化sql。 这个就比较难了,三言两语也说不清楚,只能在平时慢慢积累,多看多学了。而且这个不同的数据库系统也不完全一样。
BeginTrans()//开始一个事务操作
CommitTrans()//提交事务操作
RollBack()//撤消事务操作
_ConnectionPtr m_pConnection;
m_pConnection.BeginTrans();
for (int i = 0; i < 1000; i++)
{
myrecordset.addnew();
....
myrecordset.update(); //这条语句可以放到循环外面吗???
}
m_pConnection.CommitTrans();//这里是用EndTrans()还是 committrans