我有一个包含多个索引表的海量数据库(~800 GB)。我需要将一个表(包括索引)复制到一个新数据库。复制表本身非常简单。
$ sqlite3 newDB
> attach database 'oldDB.db' as oldDB
> create table newTable as select * from oldDB.oldTable
但我似乎无法找到有关复制索引的方法的任何信息。有没有办法做到这一点?由于表格太大,我真的很想避免重新索引它们。
答案 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;*
即可获得副本滚动。