将sqlite索引从一个数据库复制到另一个数据库

时间:2013-10-25 23:04:19

标签: sqlite

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

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

但我似乎无法找到有关复制索引的方法的任何信息。有没有办法做到这一点?由于表格太大,我真的很想避免重新索引它们。

3 个答案:

答案 0 :(得分:0)

SQLite没有复制索引内容的机制。

如果此特定表是数据库中的大部分数据,则复制它的最快方法是复制数据库文件,然后删除所有其他表。 但除此之外,你无法避免重新索引操作。

请注意CREATE TABLE ... AS ...仅复制表的内容,而不复制完整的表定义(例如列类型或约束)。

答案 1 :(得分:0)

在单个事务中复制大表不是一个好主意。如果你真的需要,你应该首先关闭日记(目标数据库):

PRAGMA journal_mode=OFF;

答案 2 :(得分:0)

正如其他人所说,指数无法突破。我 怀疑 花费时间 复制 数据库,然后 丢弃一个非常大的 em> 表格会长于 - > 1。创建新目标数据库, 2。确定原始CREATE TABLE语句(来自源数据库的SQLITE_MASTER表)并在目标中重新创建表数据库。然后 3。只需ATTACH您的目标数据库到源数据库和INSERT INTO destinationdb.tablename SELECT * FROM sourcedb.tablename;*即可获得副本滚动。