2017-10-11 83 views
1

我有一個相對較大的SQLite數據庫(〜900 MB),裏面有3個表。我最近通過軟件SQLlitebrowser從主表中刪除了一個字段。我這裏使用的找到了答案:Delete column from SQLite table在ALTER後SQLite數據庫寫入緩慢

所以我基本上跑了這一點:

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;

我也試圖通過一個python腳本來運行該查詢。

數據庫更改後,寫入主表非常緩慢。 當我嘗試在原始數據庫上寫入數據時(我在刪除該字段之前進行了備份),我可以以更快或更快的速度寫入主表。

你知道爲什麼會發生這種情況嗎?我試圖抽取新更改的數據庫,但性能損失仍在此處。

編輯:

@neuhaus:我跑的新表.schema(我第一次聽到它,原諒我,如果我濫用的話):

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

而且在老表:

sqlite> .schema papers CREATE TABLE IF NOT EXISTS "papers" ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `percentage_match` REAL, `doi` TEXT, `title` TEXT, `date` TEXT, `journal` TEXT, `authors` TEXT, `abstract` TEXT, `graphical_abstract` TEXT, `liked` INTEGER, `url` TEXT, `new` INTEGER, `topic_simple` TEXT, `author_simple` TEXT , url_image TEXT);

很明顯是有區別的。看起來這些字段的類型不在新表中。你覺得怎麼樣,我該如何糾正? ?

回答

0

使用sqlite3實用程序和它的.schema命令比較舊錶格和新表格的模式。

新表很可能缺少索引。

使用.schema命令的輸出(不包含要刪除的列)給出的CREATE TABLE語句而不是您現在使用的命令。

+0

我編輯了我的問題以添加'''schema'''的結果 – Rififi

+0

我編輯了我的答案。只需更改create table語句並添加主鍵即可。您可能還想添加舊錶格中的AUTOINCREMENT。 – neuhaus

+0

我是否也應該爲其他字段添加類型? – Rififi