Answers:
似乎没有任何方法可以在CREATE TABLE
语法中指定索引。但是,PostgreSQL确实在默认情况下为唯一约束和主键创建了一个索引,如本说明中所述:
PostgreSQL自动为每个唯一性约束和主键约束创建索引以强制唯一性。
除此之外,如果您要使用非唯一索引,则需要在单独的CREATE INDEX
查询中自行创建索引。
彼得·克劳斯(Peter Krauss)正在寻找一个规范的答案:
有一个现代语法(2020年),所以请解释并显示示例,与postgresql.org/docs/current/sql-createtable.html兼容
您正在搜索内联索引定义,该索引定义在当前版本12之前的PostgreSQL中不可用。除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
);
引入它们的原理很有趣。什么是内联索引?通过Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
..如何在不重复列名的情况下添加更多参数?
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
转换为内联索引定义的语法。PS:这个问题是关于PostgreSQL而不是Microsoft-SQL-Server(请参阅标签)。