【发布时间】:2017-08-24 20:18:52
【问题描述】:
我正在从 Postgres 文档中阅读此内容:
同时构建索引
... PostgreSQL 支持在不锁定写入的情况下构建索引。这 通过指定 CREATE 的 CONCURRENTLY 选项调用方法 指数。使用此选项时,PostgreSQL 必须执行两次扫描 表,此外它必须等待所有现有事务 这可能会修改或使用索引来终止。因此这 方法比标准索引构建需要更多的工作,并且需要 完成时间明显更长。但是,由于它允许正常 在建立索引时继续操作,此方法很有用 用于在生产环境中添加新索引....
在并发索引构建中,索引实际上是输入到 一个事务中的系统目录,然后两个表扫描发生在两个 更多的交易。在每次表扫描之前,索引构建必须等待 对于已修改表以终止的现有事务。 第二次扫描后,索引构建必须等待任何事务 在第二次扫描之前有一个快照(参见第 13 章) 终止。然后最后可以将索引标记为可以使用,并且 CREATE INDEX 命令终止。然而,即使那样,该指数也可能不会 可立即用于查询:在最坏的情况下,它不能 只要存在早于索引开始的事务就使用 构建。
什么是系统目录?什么是表扫描?所以听起来索引是先构建的,然后它必须等待现有事务(在索引构建期间发生的事务?)终止,然后等待在第二次扫描之前具有快照的任何事务终止(这是什么是什么意思?它与第一个语句有何不同)。这些扫描是什么?
【问题讨论】:
-
系统目录是存储数据库信息的表:表、列、类型、键等元信息,可以这么说。表扫描是从上到下读取表(并且可能对遇到的任何事情做一些事情)
标签: postgresql