ADO Recordset批量插入对常规插入没有优势

时间:2014-07-01 20:39:51

标签: sql-server database ado batch-processing bulkinsert


我正在使用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的批量更新功能糟透了吗?

批量插入按预期工作,我想不出任何其他方式我可以实现这个..

任何见解?

由于

0 个答案:

没有答案