1.1 索引的创建语法:
CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema>.<table_name> (<column_name> | <expression> ASC | DESC, <column_name> | <expression> ASC | DESC,...) TABLESPACE <tablespace_name> STORAGE <storage_settings> LOGGING | NOLOGGING COMPUTE STATISTICS NOCOMPRESS | COMPRESS<nn> NOSORT | REVERSE PARTITION | GLOBAL PARTITION<partition_setting>相关说明
1) UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。
2)<column_name> | ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引”
3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)
4)STORAGE:可进一步设置表空间的存储参数
5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)
6)COMPUTE STATISTICS:创建新索引时收集统计信息
7)NOCOMPRESS | COMPRESS:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)
8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值
9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区
1.2 索引类型
B树索引 位图索引 HASH索引 索引编排表 反转键索引 基于函数的索引 分区索引 本地和全局索引
B树索引(默认) --单列索引 create index indx_on_dep_id on emp(dep_id); --组合索引(压缩) CREATE INDEX indx_emp_name_salary ON emp (emp_name, salary) COMPRESS 1; -- NOLOGGING模式,加快速度,节省时间,减少产生的日志量 create index indx_on_dep_id_no on emp(dep_id) NOSORT NOLOGGING; -- Cluster Index表簇索引 CREATE CLUSTER personnel (department NUMBER(4)); CREATE INDEX idx_personnel ON CLUSTER personnel; -- XMLType类型的表中建索引 CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS CLOB; 位图索引 CREATE BITMAP INDEX indx_on_leadid ON emp(lead_id) HASH索引 见分区索引 唯一索引 CREATE UNIQUE INDEX indx_on_emp_name ON emp(emp_name) TABLESPACE users; 反转索引 create index indx_dep_id_reverse on emp(dep_id) REVERSE; 基于函数的索引 CREATE INDEX indx_upper ON emp (UPPER(emp_name)); 分区索引 -- Range-Partitioned Global Index CREATE INDEX cost_ix ON emp (salary) GLOBAL PARTITION BY RANGE (salary) (PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (2500), PARTITION p3 VALUES LESS THAN (MAXVALUE)); --Hash-Partitioned Global Index CREATE INDEX salary_ix ON emp (salary) GLOBAL PARTITION BY HASH (salary) PARTITIONS 4; 本地和局部 全局索引(global index):即可以分区,也可以不分区。即可以建range分区,也可以建hash分区,即可建于分区表,又可创建于非分区表上,就是说,全局索引是完全独立的,因此它也需要我们更多的维护操作。 本地索引(local index):其分区形式与表的分区完全相同,依赖列相同,存储属性也相同。对于本地索引,其索引分区的维护自动进行,就是说你add/drop/split/truncate表的分区时,本地索引会自动维护其索引分区。1.1 语法
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ]1.2 类型 PostgreSQL提供了几种索引类型:B-树,哈希,GIST,SP-GiST和GIN。每个索引类型使用不同的算法,是最适合于不同类型的查询。默认情况下,CREATE INDEX命令创建B-tree索引,适合最常见的情况。
B树 --单列索引 create index indx_on_dep_id on emp(dep_id); --组合索引(压缩) CREATE INDEX indx_emp_name_salary ON emp (emp_name, salary); GIN index CREATE INDEX gin_idx ON documents_table USING GIN (locations) WITH (fastupdate = off);