【发布时间】:2018-04-06 23:50:07
【问题描述】:
我有一些课堂上的代码。这是关于从另一个数据库创建一个数据库。有一个 INSERT 方法。这需要很长时间。我阅读了常见问题解答,我知道我需要将 BEGIN TRANSACTION 和 COMMIT 放在多个 INSERT 周围,但我发誓,我尝试了 c.execute(''BEGIN TRANSACTION") 和 c.execute("COMMIT") 的每个地方- 总是相同的 ca 5 kb/s。请告诉我这些指令的正确位置,或者告诉我还有什么问题。
记录在案 - 我正在使用 5400 RPM 硬盘驱动器。
这里是原始代码:
import sqlite3
conn = sqlite3.connect('/path/to/database.db')
c = conn.cursor()
with open('sqlite-sakila-schema.sql', 'r', encoding='utf-8') as create_file:
create_query = create_file.read()
with open('sqlite-sakila-insert-data.sql', 'r', encoding='utf-8') as insert_file:
insert_query = insert_file.read()
c.executescript(create_query)
c.executescript(insert_query)
conn.commit()
conn.close()
这都是关于 INSERT 的。有几个表,整个 sql 文件从这些表中删除开始,然后是 231K 行 INSERTS 代码,如下所示。
Insert into language
(language_id,name,last_update)
Values
('1','English','2006-02-15 05:02:19.000')
;
Insert into language
(language_id,name,last_update)
Values
('2','Italian','2006-02-15 05:02:19.000')
;
Insert into language
(language_id,name,last_update)
Values
('3','Japanese','2006-02-15 05:02:19.000')
;
Insert into language
(language_id,name,last_update)
Values
('4','Mandarin','2006-02-15 05:02:19.000')
;
【问题讨论】:
-
事务不会使查询更快。
-
@Barmar 我认为他怀疑他启用了自动提交,在这种情况下会有所作为。但是,如果他不使用自动提交,当然,只是改变提交的位置不会有帮助......
-
您能否发布一个小样本的
sqlite-sakila-insert-data.sql文件,以捕捉它的要点? -
@abarnert 是不是因为提交执行了
fsync(),所以当使用自动提交时,所有INSERTs 都没有流水线? -
@zwer 听起来这只是
INSERT语句的序列。