我正在使用ADO将记录插入数据库..
阅读文档,我发现ADO Recordset对象具有批量/批量插入功能。link here
理论上,批处理/批量插入在处理多行数据时应比常规插入执行好许多倍。这种性能差异在一个有趣的blog post中得到证实:
这就是我使用ADO实现批量插入的方法:
class MyRecord : public CADORecordBinding {
BEEGIN_ADO_BINDING(MyRecord)
ADO_VARIABLE_LENGTH_ENTRY2(1, adInteger, m_value, sizeof(m_value1), m_status1, TRUE)
END_ADO_BINDING()
public:
INT m_value1;
ULONG m_status1;
}
void BatchInsert() {
_RecordsetPtr RecPtr = NULL;
RecPtr.CreateInstance(__uuidof(Recordset));
RecPtr->Open("MY_TABLE_NAME", MY_CONNECTION_STRING, adOpenKeyset, adLockBatchOptimistic, adCmdTable);
IADORecordBinding *Binding = NULL;
MyRecord Record;
RecPtr->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&Binding);
Binding->BindToRecordset(&Record);
Record.m_value = 99999999;
for (int i=0; i<10000; i++) {
Binding->AddNew(&Record);
}
RecPtr.UpdateBatch(adAffectAll);
RecPtr->Close();
}
至少批量插入似乎工作正常(直到调用“UpdateBatch()”方法,实际数据库不被修改。换句话说,只有在批量10000插入语句时调用UpdateBatch叫做).. 如果我不使用批量插入功能,通过设置“adLockOptimistic”而不是“adLockBatchOptimistic”,并每秒刷新一次数据库,我可以直观地看到一次填充数据库的记录。
问题是,当我测试性能时,批量插入和普通插入之间几乎没有区别!!
这是插入10000行数据所需的平均时间:
Normal Insert = 11.016 seconds
Batch Insert = 10.841 seconds
根据我上面提到的博客文章,批量插入几乎比普通插入快100倍!然而,我的结果告诉我,表现几乎没有差异。
这仅仅是因为ADO的批量更新功能糟透了吗?
批量插入按预期工作,我想不出任何其他方式我可以实现这个..
任何见解?
由于