Delphi中SQL批量插入记录

在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式:

1.  单条语句循环插入, 这是最笨的方法:
for i := 0 to 100 do
  ADOCommand1.Execute(‘IINSERT INTO .....‘)   //伪码, 只是说明意思

2.  多条语句批量插入, 将多条Insert语句拼成一条语句, 一次执行:
for i := 0 to 100 do
  sqlstr := sqlstr + ‘INSERT INTO ...‘;
ADOCommand1.Execute(sqlstr);

3.  事务处理插入:
ADOConnection1.BeginTrans;
for i := 0 to 100 do
  ADOCommand1.Execute(‘IINSERT INTO .....‘);
ADOConnection1.CommitTrans;

如何使用这些操作, 我不做详细说明, 我来说一下它们的效率问题, 我想这才是我们关心的.

我做了这样一个试验:
建一个10个字段的数据表, 然后以此向数据表插入10,100, 500, 1000, 5000, 10000条记录, 计算他们所需的时间. 更多的记录因为时间问题未做测试, 不过这已经够说明问题的了.

看一看这两张图形:

我们可以看出在批量插入条数大于1000时, 3种插入方式产生了很大的区别, 拼接SQL语句花费的时间大大增加, 而事务处理花费的时间大概是单条插入花费时间的1/2左右.

我们再看看当记录数小于1000时是什么样子的, 如图:

我们可以看出当记录数小于100时, 拼接SQL语句的效率是很高的, 可以优先采用.

总结: 
   事务处理是不二的选择啊!

其实, 拼接SQL语句方法花费的时间大部分浪费在拼接语句上了,(不明白? 去看看string的原理吧!)

原文:http://anony3721.blog.163.com/blog/static/511974201022242736689/

时间: 2024-12-17 18:41:58

Delphi中SQL批量插入记录的相关文章

sql - 批量插入数据

直接构造 insert into t (c1, c2, c3) values (1, 1, 1), (2, 2, 2) 使用UNION insert into t (c1, c2, c3) (select a1, a2, a3) union all (select b1, b2, b3) 利用查询结果 insert into t (c1, c2, c3) (select a1, a2, a3 from t2) sql - 批量插入数据,布布扣,bubuko.com

SQL批量插入表类 SqlBulkInsert

ado.net已经有了sqlBulkCopy, 但是那个用xml格式,网络传输数据量太大. 自己实现了一个,传输尽量少的字节. 性能没对比过,有需要的自己拿去测试. 1 using System.Data.SqlClient; 2 3 namespace RaywindStudio.DAL { 4 5 /// <summary> 6 /// MSSQL批量插入表 7 /// </summary> 8 public static class SqlBulkInsert { 9 10

JDBC中的批量插入和乱码解决

字符集-乱码问题 用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生.解决办法当时是在使用JDBC的时候指定和数据库一样的字符集.我们可以在DB_URL字符串后加上”?characterEncoding=XXX”的方式指定JDBC使用的字符集. 同时,我们需要知道MySql中使用的字符集,可以通过以下两个命令获取. 1)      show variables like '%character%';获取数据库或者整个服务器使用的字符集

SQL批量插入数据

MS SQL Server数据库批量插入数据的sql语句总结: 第一种: insert into tb_NameList(Name,InsertDate,UpdateDate) values('aa',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,UpdateDate) values('bb',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,Upd

SQL 批量插入和更改数据

批量插入数据: declare @i int set @i = 12  while @i < 14 begin  INSERT INTO [mdm1220].[dbo].[DEVICE]            ([SERIAL_NUMBER]            ,[IMEI]            ,[WIFI_MAC_ADDR]            ,[BLUETOOTH_MAC_ADDR]            ,[ACTIVESYNC_ID]            ,[STRONG_

Sql批量插入方法

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.Common;using System.Data.Entity;using System.Data.SqlClient;using System.Linq; namespace TY.Tools{ /// <summary> /// 批量插入 /// </summary&

SQL批量插入、修改

1. 批量插入 insert into table_A  ( ORDER_CODE, PAYMENT_CODE) values <foreach item="item" index="index" collection="list" separator=","> (#{item.ORDER_CODE},if(#{item.PAYMENT_CODE}='',NULL,#{item.PAYMENT_CODE})) 2.

sql 批量插入 insert

INSERT INTO table ( "clo1", "col2", "col3", "col4", "col5" )VALUES ( 1, 10, NULL, '2019-12-19 13:38:35', '新年活动16张卡券'), ( 2, 11, NULL, '2019-12-19 15:05:13', '圣诞活动11张卡券'), ( 3, 12, NULL, '2019-12-19 15:05:1

sql 批量插入数据到Sqlserver中 效率较高的方法

使用SqlBulk #region 方式二 static void InsertTwo() { Console.WriteLine("使用Bulk插入的实现方式"); Stopwatch sw = new Stopwatch(); DataTable dt = GetTableSchema(); using (SqlConnection conn = new SqlConnection(StrConnMsg)) { SqlBulkCopy bulkCopy = new SqlBulkC