繁体   English   中英

Python:sqlite3-如何加快数据库更新

[英]Python: sqlite3 - how to speed up updating of the database

我有一个数据库,该数据库以.db文件的形式存储在磁盘上。 我使用sqlite3实现了管理该数据库所需的所有功能。 但是,我注意到更新表中的行需要大量时间。 我的数据库当前有608042行。 该数据库有一个表-我们称之为Table1 该表包括以下列:

id | name | age | address | job | phone | income

(将一行插入数据库时​​自动生成id值)。 读完所有行后,我对行中的值执行一些操作(用于预测收入的ML算法),然后我必须(针对每一行)更新income值(因此,针对608042行中的每一行)我执行SQL update操作)。 为了更新,我使用以下功能(从我的课程中复制):

def update_row(self, new_value, idkey):
    update_query = "UPDATE Table1 SET income = ? WHERE name = ?" % 
    self.cursor.execute(update_query, (new_value, idkey))
    self.db.commit()

我为在数据库中注册的每个人调用此函数。

for each i out of 608042 rows:
  update_row(new_income_i, i.name)

(每个i的new_income_i的值都不同)。 即使数据集不是很大,也要花费大量时间。 有什么办法可以加快数据库的更新? 我是否应该使用sqlite3以外的其他工具? 还是应该代替将数据库存储为.db文件而是将其存储在内存中(使用sqlite3.connect(":memory:") )?

每个UPDATE语句必须扫描整个表以查找与该名称匹配的任何行。

name列上的索引可以防止这种情况并使搜索更快。 (请参阅查询计划数据库索引如何工作?

但是,如果name列不是唯一的,则该值甚至都不适合查找单独的行:每次使用重复名称进行的更新都会修改具有相同名称的所有行。 因此,您应该使用id列来标识要更新的行; 作为主键,此列已具有隐式索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM