【发布时间】:2015-09-30 20:40:57
【问题描述】:
我对 SQL(或这里的 PostgreSQL)相当缺乏经验,我正在尝试正确理解和使用索引。
PostgreSQL 为CREATE INDEX 和the documentation says 提供了一个CONCURRENTLY 选项:
"使用此选项时,PostgreSQL 必须执行两次表扫描,此外它必须等待所有可能使用索引的现有事务终止。因此,此方法需要的总工作量比标准的索引构建,并且需要更长的时间才能完成。但是,由于它允许在构建索引的同时继续正常操作,因此此方法对于在生产环境中添加新索引很有用。"
- 这是否意味着
INDEX仅在启动时或迁移过程中创建?
我知道,如果表随着时间的推移变得碎片化,可以重新索引表(不知道这实际上是如何发生的,以及为什么索引没有保持“最新”),并且重新索引有助于数据库再次变得更有效率。
- 在这样的重新索引过程中,我可以从
CONCURRENTLY中受益吗?
除此之外,我也在问自己
- 是否存在我应该避免
CONCURRENTLY的情况,或者在我创建的每个INDEX上使用CONCURRENTLY会不会有伤害?
【问题讨论】:
-
at startup和during a migration process是什么意思? -
@wildplasser “在启动时”是指在整个服务器实例重新启动后可能需要启动的 PostgreSQL 服务器。 “在迁移过程中”是指如果我例如在已包含数据的现有表上创建新索引。
-
"startup" :索引是一个表(技术上)。它保存在磁盘上,就像普通的表一样。 “迁移”:可以称为 DDL 操作(数据定义语言)它基本上是对现有模式(模型)的更改。
标签: postgresql