在ALTER之后在SQLite数据库上写慢

时间:2017-10-11 13:20:42

标签: database sqlite

我有一个比较大的SQLite数据库(~900 MB),里面有3个表。我最近通过软件SQLlitebrowser从主表中删除了一个字段。我使用了这里找到的答案:Delete column from SQLite table

我基本上跑了这个:

response()->download(...)

我还尝试通过python脚本运行该查询。

更改数据库后,写入主表的速度非常慢。 当我尝试在原始数据库上写入时(我在删除字段之前做了备份),我可以写入主表或多或少10000倍。

你知道为什么会这样吗?我试图对新更改的数据库进行抽真空,但性能损失仍然存在。

编辑:

@neuhaus:我在新桌子上跑了.schema(我第一次听到它,请原谅我,如果我误用了它):

BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(id, percentage_match, doi, title, date, journal, authors, abstract, graphical_abstract, liked, url, new, topic_simple, author_simple); INSERT INTO t1_backup SELECT id, percentage_match, doi, title, date, journal, authors, abstract, graphical_abstract, liked, url, new, topic_simple, author_simple FROM papers; DROP TABLE papers; CREATE TABLE papers(id, percentage_match, doi, title, date, journal, authors, abstract, graphical_abstract, liked, url, new, topic_simple, author_simple); INSERT INTO papers SELECT id, percentage_match, doi, title, date, journal, authors, abstract, graphical_abstract, liked, url, new, topic_simple, author_simple FROM t1_backup; DROP TABLE t1_backup; COMMIT;

在旧桌子上:

sqlite> .schema papers CREATE TABLE papers(id, percentage_match, doi, title, date, journal, authors, abstract, graphical_abstract, liked, url, new, topic_simple, author_simple);

显然存在差异。似乎新表中没有字段的类型。你怎么想,我该如何纠正? ?

1 个答案:

答案 0 :(得分:0)

使用sqlite3实用程序及其.schema命令比较旧表和新表的架构。

新表可能缺少索引。

使用.schema命令的输出(不包含要删除的列)给出的CREATE TABLE语句,而不是您现在使用的语句。