Office中国论坛/Access中国论坛

标题: 多行数据插入搦令的效率的坑 [打印本页]

作者: midasli    时间: 2021-12-7 09:47
标题: 多行数据插入搦令的效率的坑
网上找了一个查询,可以把多行数据,只使用一个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条/秒左右。





作者: midasli    时间: 2021-12-7 09:49
所以还不如直接单条 Insert into 了事,大小数据通吃




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3