2017-10-11 6 views
1

3つのテーブルがある比較的大きなSQLiteデータベース(〜900 MB)があります。私は最近、ソフトウェアSQLlitebrowserを通してメインテーブルからフィールドを削除しました。私はここで見つける答え使用:Delete column from SQLite tableALTERの後の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スクリプトを通じてそのクエリを実行しようとしました。

データベースの変更後、メインテーブルへの書き込みは非常に遅いです。 元のデータベース(フィールドを削除する前にバックアップを作成しました)に書き込もうとすると、メインテーブルに書き込む回数を10000倍以上に増やすことができます。

これがなぜ起こっているのか考えていますか?私は新しく変更されたデータベースを無効にしようとしましたが、パフォーマンスの低下はまだここにあります。

EDIT:

@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

関連する問題