0

我有一个包含多个索引表的大型数据库(约 800 GB)。我需要将一个表(包括索引)复制到一个新数据库。复制表格本身非常简单。

$ 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 回答
0

正如其他人所说,该指数不能被打破。我怀疑复制数据库然后删除一个非常大的表所花费的时间不仅仅是 -> 1.创建新的目标数据库,2.确定原始CREATE TABLE语句(来自源数据库的 SQLITE_MASTER 表)并重新创建表在目标数据库中。然后3.只需ATTACH将您的目标数据库复制到源数据库并INSERT INTO destinationdb.tablename SELECT * FROM sourcedb.tablename;*获取副本滚动。

于 2013-10-26T17:56:23.150 回答