0

いくつかのインデックス付きテーブルを持つ大規模なデータベース (〜 800 GB) があります。1 つのテーブル (インデックスを含む) を新しいデータベースにコピーする必要があります。テーブル自体のコピーは非常に簡単です。

$ sqlite3 newDB
> attach database 'oldDB.db' as oldDB
> create table newTable as select * from oldDB.oldTable

しかし、インデックスもコピーする方法に関する情報が見つからないようです。これを行う方法はありますか?テーブルが非常に大きいため、インデックスを再作成する必要はありません。

4

3 に答える 3

0

単一のトランザクションで大きなテーブルをコピーすることはお勧めできません。本当に必要な場合は、最初にジャーナリングをオフにする必要があります (宛先データベース):

PRAGMA journal_mode=OFF;
于 2013-10-26T10:32:19.397 に答える
0

SQLite には、インデックスの内容をコピーするメカニズムがありません。

この特定のテーブルがデータベース内のデータの大部分を占める場合、それをコピーする最速の方法は、データベースファイルをコピーしてから、他のすべてのテーブルを削除することです。しかし、そうでなければ、再インデックス操作を避けることはできません。

CREATE TABLE ... AS ...はテーブルの内容のみをコピーし、完全なテーブル定義 (列の型や制約など) はコピーしないことに注意してください。

于 2013-10-26T07:43:25.830 に答える