我有一个包含多个索引表的大型数据库(约 800 GB)。我需要将一个表(包括索引)复制到一个新数据库。复制表格本身非常简单。
$ sqlite3 newDB
> attach database 'oldDB.db' as oldDB
> create table newTable as select * from oldDB.oldTable
但我似乎找不到任何关于复制索引的方法的信息。有没有办法做到这一点?由于表格太大,我真的很想避免重新索引它们。
我有一个包含多个索引表的大型数据库(约 800 GB)。我需要将一个表(包括索引)复制到一个新数据库。复制表格本身非常简单。
$ sqlite3 newDB
> attach database 'oldDB.db' as oldDB
> create table newTable as select * from oldDB.oldTable
但我似乎找不到任何关于复制索引的方法的信息。有没有办法做到这一点?由于表格太大,我真的很想避免重新索引它们。
在单个事务中复制大表不是一个好主意。如果你真的需要,你应该先关闭日志(目标数据库):
PRAGMA journal_mode=OFF;
SQLite 没有复制索引内容的机制。
如果这个特定的表是数据库中的大部分数据,那么复制它的最快方法是复制数据库文件,然后删除所有其他表。但除此之外,您无法避免重新索引操作。
请注意,CREATE TABLE ... AS ...
它只复制表的内容,而不是完整的表定义(例如列类型或约束)。
正如其他人所说,该指数不能被打破。我怀疑复制数据库然后删除一个非常大的表所花费的时间不仅仅是 -> 1.创建新的目标数据库,2.确定原始CREATE TABLE
语句(来自源数据库的 SQLITE_MASTER 表)并重新创建表在目标数据库中。然后3.只需ATTACH
将您的目标数据库复制到源数据库并INSERT INTO destinationdb.tablename SELECT * FROM sourcedb.tablename;*
获取副本滚动。