如果你在某些方面是个小白,那你走每一步都很受挫。
最近公司做了一个XXX系统(C++),使用ADO连接数据库,系统实现之后发现,数据库的插入效率很是问题,10万条左右的记录用时9分多钟,当然不管是客户端还是服务器的配置都比较低,但应该也不至于速度如此之慢,网上搜了下,有些人的插入效率能达到每秒8000条,看着这些数据我也是醉了,于是,就想优化一下数据库的插入效率。
当然,我写这个的目的并不是说我的数据库是怎么优化的(最后还是没成功,优化为了10万条用时3分钟,每秒500条,比着8000条还是没法说的)。我的目的是想说一下ADO的记录集(RecordsetPrt)的AddNew()从不能用到能用的艰辛过程,如果你也遇到这种问题了,或许对你有帮助。
首先先交代一下背景,一开始插入数据库的操作是使用的ADO中的连接对象(ConnectPtr),然后通过将要插入的数据拼成SQL执行的方式来进行数据插入。由于插入效率太低,我准备改成使用记录集(RecordsetPtr)来进行插入处理。
上网搜了下,使用RecordsetPtr来插入时很简单,只要Open之后,AddNew,然后PutCollect,最后Update或者UpdateBatch就行了。于是照着葫芦画了个瓢,结果怎么都不行,一直在Support(adAddNew)的时候返回False,将Support注释之后,AddNew一直抛异常。
对于这个现象,我首先考虑的是