Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ADO记录集批量插入与常规插入相比没有优势_Sql Server_Database_Ado_Batch Processing_Bulkinsert - Fatal编程技术网

Sql server ADO记录集批量插入与常规插入相比没有优势

Sql server ADO记录集批量插入与常规插入相比没有优势,sql-server,database,ado,batch-processing,bulkinsert,Sql Server,Database,Ado,Batch Processing,Bulkinsert,我正在使用ADO将记录插入数据库 阅读文档后,我发现ADO记录集对象具有批处理/批量插入功能 理论上,在处理多行数据时,批处理/批量插入的性能应该比常规插入好很多倍。。这种性能差异在一个有趣的例子中得到了证实: 这就是我如何使用ADO实现批量插入: class MyRecord : public CADORecordBinding { BEEGIN_ADO_BINDING(MyRecord) ADO_VARIABLE_LENGTH_ENTRY2(1, adInteger, m


我正在使用ADO将记录插入数据库

阅读文档后,我发现ADO记录集对象具有批处理/批量插入功能

理论上,在处理多行数据时,批处理/批量插入的性能应该比常规插入好很多倍。。这种性能差异在一个有趣的例子中得到了证实:


这就是我如何使用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();
}
根据我上面提到的博文,批量插入比普通插入快近100倍!!然而,我的结果告诉我,在性能上几乎没有差别

这仅仅是因为ADO的批处理更新功能很糟糕吗

批插入按预期工作,我想不出任何其他方法来实现这一点

有什么见解吗


谢谢

我认为这样做的好处是在事务中包装插入内容的速度更快。@Brad Hm。。这样做的好处是什么,简单地包装说明??我上面提到的博客文章说了一些不同的东西。你提到的Venzi的技术博客是一篇关于Oracle的文章,而不是关于SQL Server的。有关优化批量事务的更多详细信息,请参阅。在SQL Server中,“批量插入”是非常具体的。我不太了解Oracle,但在MS方面,这意味着您正在将文件读入数据库。它的格式和你的桌子一样。您似乎在谈论通过ADO提供程序进行的批插入,而ADO提供程序又是如此。如果ADO正在与Sql Server或Oracle通信,则可能会有所不同,但我知道这些是事务处理插入。批量批处理(不一定==)事务
Normal Insert = 11.016 seconds
Batch Insert = 10.841 seconds