DuckDB不同方法插入1万行数据的性能比较

DuckDB虽然是一个分析型数据库,它也支持DML操作,但这个操作也最好是批量的,如果用循环来执行,效率很低,那么到底效率有多低,用实验来说明。
代码如下:

import duckdb
import time

methods=['字符串拼接','绑定变量循环','绑定变量批量']

trans=['自动提交','事务']

def f(method,n,con,tran):
  con.execute("truncate table t")
  lis=[[i] for i in range(n)]
  if tran==1:con.execute("begin transaction")
  t=time.time();
  if method==0:
     for i in range(n):con.execute("insert into t select "+str(i))
  elif method==1:
     for i in range(n):con.execute("insert into t values (?)", [i])  
  elif method==2:
     con.executemany("insert into t values (?)", lis) 
  if tran==1:con.execute("commit") 
  print(trans[tran]," ",methods[method],":",round(time.time()-t,2),"s")


n=10000

#字符串拼接

con = duckdb.connect(database = ":memory:")
con.execute("create table t(a int)")


for m in range(3):
  for t in range(2):
    f(m,n,con,t)

t=time.time();con.execute("insert into t select i from range("+str(n)+")t(i)");print("利用SQL语句本身批量:",round(time.time()-t,2),"s")

输出如下

自动提交   字符串拼接 : 5.01 s
事务   字符串拼接 : 3.82 s
自动提交   绑定变量循环 : 5.79 s
事务   绑定变量循环 : 4.59 s
自动提交   绑定变量批量 : 2.42 s
事务   绑定变量批量 : 1.23 s
利用SQL语句本身批量: 0.0 s

看来各种涉及变量的方法差距不大,而与SQL本身的批量比,差距太大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值