我在一个很大的表上删除了一些索引,并意识到我需要它们。我想知道是否可以只使用删除索引之前的数据库副本进行还原,而不是同时将它们添加回去,这会花费很长时间?
答案 0 :(得分:2)
我将回答MySQL。您用mysql和postgresql标记了您的问题,所以我不知道您真正使用了哪个。
如果您的备份是使用诸如Percona XtraBackup或MySQL Enterprise Backup之类的备份解决方案进行的物理备份,则它将包含索引,因此恢复起来会更快。
如果备份是使用mysqldump
或mydumper
进行的逻辑备份,则备份仅包含数据。还原它无论如何都必须重建索引。它不会节省任何时间。
如果仅通过将文件复制到数据目录之外而犯了“进行备份”的错误,则这些备份类似于物理备份,但是除非在关闭MySQL Server的同时复制文件,否则备份是可能不可行。
答案 1 :(得分:1)
如果“数据库副本”是指文件级别的 Postgres 数据库目录的副本(Postgres没有运行以获取一致状态),则是,这样的快照还包括所有内容和索引。您可以将其复制回文件级别,然后启动Postgres-当然可以回到先前的状态。
对于OTOH,如果您是指使用标准Postgres工具pg_dump
或pg_dumpall
进行的备份,则否,则物理上不包含索引。只是建立它们的说明。包含功能相关的值的大量垃圾是没有意义的。从还原的数据构建它们可能差不多快。
无论哪种方式,在对表进行更改之后,无论如何都无法将索引从较早的快照添加回实时数据库。从逻辑上讲这是不可能的。因此,别无选择,只能以一种或另一种方式重建索引。