我想在创建时为表中的某些列添加索引。有没有办法将它们添加到CREATE TABLE定义中,或者我之后是否必须使用其他查询添加它们?
CREATE INDEX reply_user_id ON reply USING btree (user_id);
答案 0 :(得分:88)
似乎没有任何方法可以在CREATE TABLE
语法中指定索引。但是,PostgreSQL默认为唯一约束和主键创建索引,如this note中所述:
PostgreSQL会自动为每个唯一约束和主键约束创建索引,以强制实现唯一性。
除此之外,如果您需要非唯一索引,则需要在单独的CREATE INDEX
查询中自行创建。
答案 1 :(得分:16)
没有
但是,您可以在create中创建unique
索引,但那是因为它们被归类为约束。您无法创建“常规”索引。
答案 2 :(得分:9)
Peter Krauss正在寻找一个规范的答案:
有一个现代语法(2020年),所以请解释并显示与postgresql.org/docs/current/sql-createtable.html兼容的示例
您要搜索的内联索引定义,在最新版本的PostgreSQL 12之前不可用。除UNIQUE / PRIMARY KEY约束外,它会为您创建基础索引。
[CONSTRAINT约束名称] {检查(表达式)[否继承] | UNIQUE(column_name [,...])index_parameters | 主键(column_name [,...])index_parameters |
内联列定义(此处为SQL Server)的示例语法:
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
);
介绍它们的原理非常有趣What are Inline Indexes? by Phil Factor