CREATE INDEX
是用于创建索引的 DDL 命令。
CREATE INDEX
一直存在于 PostgreSQL 中。
变更历史
- PostgreSQL 15
- 添加了
UNIQUE [ NULLS [ NOT ] DISTINCT ]
语法 (提交 94aa7cc5)
- 添加了
- PostgreSQL 13
- 添加了对 opclass 参数的支持 (提交 911e7020)
- 移除了对已弃用的早于 PostgreSQL 8.0 的 opclass 名称的隐式支持 (提交 84eca14b)
- 添加了
deduplicate_items
存储参数 (提交 0d861bbb)
- PostgreSQL 12
- 可以使用
pg_stat_progress_create_index
跟踪CREATE INDEX
的进度 (提交 ab0dfc96)
- 可以使用
- PostgreSQL 11
- 添加了通过
INCLUDE
子句支持覆盖索引 (提交 8224de4f)
- 添加了通过
- PostgreSQL 9.5
- 添加了
IF NOT EXISTS
语法 (提交 08309aaf)
- 添加了
- PostgreSQL 9.1
- 添加了选项
COLLATE
(提交 414c5a2e)
- 添加了选项
- PostgreSQL 8.3
- 添加了选项
ASC
/DESC
/NULLS FIRST
/NULLS LAST
(对于 btree 索引) (提交 44317582)
- 添加了选项
- PostgreSQL 8.2
- PostgreSQL 8.0
- 添加了选项
TABLESPACE
(提交 2467394e)
- 添加了选项
- PostgreSQL 7.2
- 添加了对部分索引的支持 (初始提交 f31dc0ad)
- PostgreSQL 6.1
- 正确的多列索引创建 (提交 65019fcf)
示例
CREATE INDEX
的基本用法示例
postgres=# CREATE INDEX ON foo (bar_id); CREATE INDEX postgres=# \d foo Table "public.foo" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- id | integer | | not null | bar_id | integer | | not null | Indexes: "foo_pkey" PRIMARY KEY, btree (id) "foo_bar_id_idx" btree (bar_id) Foreign-key constraints: "foo_bar_id_fkey" FOREIGN KEY (bar_id) REFERENCES bar(id)
参考文献
- PostgreSQL 文档: CREATE INDEX
有用链接
- 使用 Postgres CREATE INDEX:理解操作符类、索引类型及更多 - 2021 年 8 月 pganalyze 博客文章