首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使sqlite3列更新速度更快

使sqlite3列更新速度更快
EN

Stack Overflow用户
提问于 2014-06-23 22:21:43
回答 2查看 1K关注 0票数 0

我编写了一个Python代码,它迭代地从sqlite数据库读取数据,对其进行一些计算,并将结果以新列的形式写入数据库,等等。但是,通过更新列来写入数据库的部分感觉随着时间的推移变得越来越慢。有没有其他方法可以让我做同样的事情,但速度更快?

下面是我代码的相关部分。在代码的这一部分中,创建了两个新列column_I1_和column_I2_,每个列以迭代数结尾,比如column_I1_1、column_I2_1,然后从相应的列表将新的结果写入这些列中。问题是,考虑到迭代次数多,计算耗时,加上高行数(这里由num值定义,大约11000行),这一工作太慢了.

是否有其他方法来代替使用update?因为我认为要进行更新,每次添加新值时都必须复制该列,这会导致速度减慢。我以前经常使用Excel,而且速度更快,但是由于电子表格有256列限制,所以我不得不切换到数据库。

代码语言:javascript
代码运行次数:0
运行
复制
cur.execute("alter table C add column_I1_%d integer"%iter) #makes a new column indexed by iteration number
con.commit()
for e in range(0,num): # num is a given number as input
    cur.execute("UPDATE C SET column_I1_%d=? WHERE Id=%d"%(iter,e+1),(w[e],)) # w is a list containing some results
con.commit()
    #
cur.execute("alter table C add column_I2_%d integer"%iter)  
con.commit()
for f in range(num,(2*num)):         
    cur.execute("UPDATE C SET column_I2_%d=? WHERE Id=%d"%(iter,f-num+1),(w[f],))
con.commit()

.

非常感谢您的评论。另外,我相对来说是个Python新手,所以请对我轻松一点!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-24 08:27:57

若要加快对Id列的查找,请在其上创建一个索引:

代码语言:javascript
代码运行次数:0
运行
复制
cur.execute("CREATE INDEX MyLittleIndex ON C(Id)");

或者,如果Id列中的值是唯一的,则将该列声明为主键(自动创建索引):

代码语言:javascript
代码运行次数:0
运行
复制
cur.execute("CREATE TABLE C(Id PRIMARY KEY)");

如果值是整数,则将此列声明为整数主键会更有效:

代码语言:javascript
代码运行次数:0
运行
复制
cur.execute("CREATE TABLE C(Id INTEGER PRIMARY KEY)");
票数 2
EN

Stack Overflow用户

发布于 2014-06-23 22:57:15

您可以考虑一次调用executemany,而不是在循环中调用execute。

例如,考虑下面的代码,

代码语言:javascript
代码运行次数:0
运行
复制
for e in range(0,num): # num is a given number as input
    cur.execute("UPDATE C SET column_I1_%d=? WHERE Id=%d"%(iter,e+1),(w[e],))

它可以转化为:

代码语言:javascript
代码运行次数:0
运行
复制
cur.executemany("UPDATE C SET column_I1_%d=? WHERE Id=?"%(iter), zip(w, range(num)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24375531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档