Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:sqlite3-如何加快数据库更新_Python_Database_Sqlite_Sql Update - Fatal编程技术网

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

Python:sqlite3-如何加快数据库更新,python,database,sqlite,sql-update,Python,Database,Sqlite,Sql Update,我有一个数据库,作为.db文件存储在磁盘上。我使用sqlite3实现了管理该数据库所需的所有功能。但是,我注意到更新表中的行需要花费大量时间。我的数据库当前有608042行。数据库有一个表,我们称之为Table1。此表由以下列组成: id | name | age | address | job | phone | income (id在将行插入数据库时自动生成值)。 在读取所有行之后,我对行中的值执行一些操作(用于预测收入的ML算法),接下来我必须更新(对于每行)收入的值(因此,对于6080

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

id | name | age | address | job | phone | income
id
在将行插入数据库时自动生成值)。 在读取所有行之后,我对行中的值执行一些操作(用于预测收入的ML算法),接下来我必须更新(对于每行)收入的值(因此,对于608042行中的每一行,我执行
SQL更新
操作)。 为了更新,我正在使用以下函数(从我的类复制):

我为数据库中注册的每个人调用这个函数

for each i out of 608042 rows:
  update_row(new_income_i, i.name)
(每个i的新收入值不同)。
这需要大量的时间,即使数据集不是巨大的。有没有办法加快数据库的更新速度?我应该使用sqlite3以外的东西吗?或者我应该将数据库存储为.db文件而不是将其存储在内存中(使用
sqlite3.connect(“:memory:”)
)?

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

name
列上的索引可以防止这种情况,并使搜索速度更快。(见和)


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

您是否尝试在列
name
上创建索引,或者甚至使用
id
更新这些记录?如果
name
对每一行都是唯一的,您甚至可以尝试在
name
列上创建一个唯一的索引,但我认为使用
id
应该很快,因为它不是字符串而是数字。@id是唯一的,名称不一定是唯一的。请您多告诉我一点,这个索引是怎么做的以及它能帮助什么?看看“数据库索引是如何工作的”?考虑使用支持存储过程的数据库,这样您就可以实现ML算法作为一个存储过程,它可以应用在一个更新语句中,不必将所有数据移到Python中,然后一次将结果移回一行。@rd_nielsen您可以推荐任何支持存储过程的数据库或任何我可以阅读的教程/博客文章吗?谢谢您的解释!
for each i out of 608042 rows:
  update_row(new_income_i, i.name)