可以在 CREATETABLE 定义中创建索引吗?

我希望在创建时为表中的一些列添加索引。是否有方法将它们添加到 CREATETABLE 定义中,还是必须在之后用另一个查询添加它们?

CREATE INDEX reply_user_id ON reply USING btree (user_id);
68625 次浏览

没有。

但是,您可以在创建中创建 unique索引,这是因为它们被归类为 约束。您不能创建“通用”索引。

CREATE TABLE语法中似乎没有任何指定索引的方法。然而,PostgreSQL 默认情况下会为唯一约束和主键创建一个索引,如 这张纸条所述:

PostgreSQL 自动为每个唯一约束和主键约束创建一个索引,以强制唯一性。

除此之外,如果需要非唯一索引,则需要在单独的 CREATE INDEX查询中自己创建该索引。

彼得•克劳斯(Peter Krauss)正在寻找一个规范的答案:

有一个现代语法(2020年) ,所以请解释和显示示例,兼容 postgresql.org/docs/current/sql-createtable.html

您正在搜索的是 内联索引定义内联索引定义,它在当前版本12之前不适用于 PostgreSQL。除了 UNIQUE/PRIMARYKEY 约束之外,它为您创建基础索引。

创建表

[ CONSTRINT 約束 _ name ] { CHECK (Expression)[ NO INHERIT ] | UNIQUE (column _ name [ ,... ]) index _ properties | PRIMARYKEY (column _ name [ ,... ]) index _ properties |


内联列定义的示例语法(这里是 SQLServer) :

CREATE TABLE tab(
id INT PRIMARY KEY,                            -- constraint
c INT INDEX filtered (c) WHERE c > 10,         -- filtered index
b VARCHAR(10) NOT NULL INDEX idx_tab_b,        -- index on column
d VARCHAR(20) NOT NULL,
INDEX my_index NONCLUSTERED(d)                 -- index on column as separate entry
);

Db < > 小提琴演奏

引入它们的基本原理是非常有趣的 什么是内联索引