把1000万条记录插入数据库的性能问题,急!!!

时间:2021-09-09 23:21:59
一个表有十个字段,每个字段都是些double型的数据,我在程序里面循环插入1000万条记录,但是非常慢。数据库是sql server 在vc下面用ado作,就是用最简单的insert into这个sql语句。但是插入16万条就得30分钟,太慢了,有其它方法妈?还是我的程序有问题,3ks!!!!1

9 个解决方案

#1


upup

#2


如果是从某些库或者文件里面倒的话,你可以采用SQLServer DTS,或者BCP进行倒入。

如果你是由程序计算产生数据的话,建议你将目标表中的索引和主键先通通删掉,倒完后再建。如果是计算得到的,建议你在存储过程中计算,然后往表里放。

#3


把你的SQL帖出来,要不不好给你分析,其实原因是挺多的,插入这么多是有点慢。
但不至于你插入16万条就这么慢,可能你的SQL没有优化吗?
   我在这方有一点经验,
    处理过8、9百万的记录。

#4


strSQL.Format("insert into weather(id,Pressure,Temperature,Windu,Windv,sgidu,Cloudy,Rain,Height,EveryTime) 
values(%d,%f,%f,%f,%f,%f,%f,%f,%f,%d)", m_nRecordNums, pData->pPressure[i][j], pData->pTemperature[i][j],pData->pWindu[i][j], pData->pWindv[i][j], pData->psgidu[i][j], pData->pCloudy[i][j],pData->pRain[i][j], pData->nHeight, pData->nTime);

m_pRecd->Open((_variant_t)strSQL, (IDispatch*)m_pConn, adOpenDynamic,adLockOptimistic, adCmdText);

我觉得是有点慢
i,j是外层循环
大家帮助小弟

#5


to:swordmanli我在导入前表是空的,没有你说的索引什么。由于文件的格式我在用dts时候导入的不理想,所以用程序实现。我的程序是读取文件中的5000条记录保存到数组中,然后循环插入

#6


这样啊,建议你仍然用DTS倒入到SQLServer中,然后你再用一个存储过程来处理,然后放到目标表,这样肯定比你现在要快很多。

当然,为了更加有效,存储过程也可以分成几次,比如每一次倒入50万条。

#7


用BCP吧,速度特别快

#8


将要插入的数据写入文本文件中,然后将数据库恢复模型设置为simple(目的是bcp导入时不写日志),然后再用bcp/bulk insert导入

这样的速度肯定快很多.

#9


1、数据库恢复模型设置为simple
2、先去掉表上的索引
会好些

#1


upup

#2


如果是从某些库或者文件里面倒的话,你可以采用SQLServer DTS,或者BCP进行倒入。

如果你是由程序计算产生数据的话,建议你将目标表中的索引和主键先通通删掉,倒完后再建。如果是计算得到的,建议你在存储过程中计算,然后往表里放。

#3


把你的SQL帖出来,要不不好给你分析,其实原因是挺多的,插入这么多是有点慢。
但不至于你插入16万条就这么慢,可能你的SQL没有优化吗?
   我在这方有一点经验,
    处理过8、9百万的记录。

#4


strSQL.Format("insert into weather(id,Pressure,Temperature,Windu,Windv,sgidu,Cloudy,Rain,Height,EveryTime) 
values(%d,%f,%f,%f,%f,%f,%f,%f,%f,%d)", m_nRecordNums, pData->pPressure[i][j], pData->pTemperature[i][j],pData->pWindu[i][j], pData->pWindv[i][j], pData->psgidu[i][j], pData->pCloudy[i][j],pData->pRain[i][j], pData->nHeight, pData->nTime);

m_pRecd->Open((_variant_t)strSQL, (IDispatch*)m_pConn, adOpenDynamic,adLockOptimistic, adCmdText);

我觉得是有点慢
i,j是外层循环
大家帮助小弟

#5


to:swordmanli我在导入前表是空的,没有你说的索引什么。由于文件的格式我在用dts时候导入的不理想,所以用程序实现。我的程序是读取文件中的5000条记录保存到数组中,然后循环插入

#6


这样啊,建议你仍然用DTS倒入到SQLServer中,然后你再用一个存储过程来处理,然后放到目标表,这样肯定比你现在要快很多。

当然,为了更加有效,存储过程也可以分成几次,比如每一次倒入50万条。

#7


用BCP吧,速度特别快

#8


将要插入的数据写入文本文件中,然后将数据库恢复模型设置为simple(目的是bcp导入时不写日志),然后再用bcp/bulk insert导入

这样的速度肯定快很多.

#9


1、数据库恢复模型设置为simple
2、先去掉表上的索引
会好些