索引类型
- b-tree 索引 默认 > >= between is null 等用这个
- 哈希索引 处理=值比较
- gin 适合 array,hstore,json,range
- brin 线性排序的列 销售订单表的日期等
- gist
- sp-gist
创建索引
ON table_name [ USING method ]
(
column_name [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
[, ...]
);
说明:
name 索引的名称。它是可选的。如果您不指定索引名称,PostgreSQL 将会自动生成一个。
table_name 是要为其创建索引的表名。
method 是索引方法的名称。包括 btree, hash, gist, spgist, gin, 和 brin。 btree 是默认的方法。您可以查看索引类型以了解更多。
column_name 是要创建索引的列名。
[ ASC | DESC ] 指定排序是顺序还是逆序。 它是可选的, ASC 是默认值。
NULLS FIRST 或 NULLS LAST 指定排序时空值在非空值之前或之后。当指定 DESC 时, NULLS FIRST 是默认的,否则 NULLS LAST 是默认的。
UNIQUE 指示创建一个唯一索引。
IF NOT EXISTS 指示只有指定的索引名称不存在时才创建索引。
PostgreSQL 会对主键列自动创建索引。
要检查查询是否使用索引,请使用该 EXPLAIN 语句。
如果您在一个索引中使用了多个列,那么此索引被称为多列索引或复合索引。
删除索引
[ IF EXISTS ] name
[ CASCADE | RESTRICT ];
说明:
name 是要删除的索引的名称。
IF EXISTS 指示如果指定的索引不存在将不会给出错误, PostgreSQL 将会发出一个通知。
CASCADE 指示 PostgreSQL 自动删除那些依赖于此索引的对象。
RESTRICT 指示如果有其他对象依赖于此索引,则拒绝删除。 这是默认的行为。
删除索引时, PostgreSQL 默认会获取该表的排他锁并阻止任何其他的访问,知道索引删除完成。您可以使用 CONCURRENTLY 选项改变这一行为。
注意,当使用 CASCADE 选项时, 不支持 CONCURRENTLY。