|
网上找了一个查询,可以把多行数据,只使用一个sql插入到表中,例:
Insert INTO 目标表
Select DISTINCT *
FROM (Select 1 AS ID,"tt1" AS 供应商名称,"广东1" AS 供应商地址 FROM MSysObjects UNION
Select 2 AS ID,"tt2" AS 供应商名称,"广东2" AS 供应商地址 FROM MSysObjects UNION
Select 3 AS ID,"tt3" AS 供应商名称,"广东3" AS 供应商地址 FROM MSysObjects UNION
Select 4 AS ID,"tt4" AS 供应商名称,"广东4" AS 供应商地址 FROM MSysObjects) AS tblTemp;
但是在大数据量中用ado执行,实际是问题多多的,效率也很差。
研究了一下,这是因为
每个select+MsysObjects,一般MsysObjects都有几十条记录,这样做大数据插入,每条select指令消耗不少资源,加上distinct更多是。
假如MsysObjects有40条,每select就会产生40条在内存,用户如果要插入30万条记录,那就是开销就是30万*40条,然后再把所有记录做一次disinct,开销就会更大。
另外ado连接的程序,对于accdb中的MSysObjects还有权限问题,不能使用,即使能设置也麻烦。
这个办法做大数据插入,并使用分批输出sql指令执行,速度只有120条/秒左右,同样的条数和机器,使用单条的Insert into 指令,速度是866条/秒左右。
|
|