4.9 索引

4.9.1 索引简介

  1. 索引是数据库用于快速查询数据的方法,类似一本书的目录,通过目录可以找到查询的内容的页码

  2. 简历索引的代价:

    1. 增加数据库的存储空间

    2. 插入与修改花费时间较多

4.9.2 索引的分类

  1. PostgreSQL支持一下几类索引:

    1. BTree:最常用的索引,BTree索引适合用于处理等值查询和范围查询

    2. HASH:只能处理简单的等值查询

    3. GiST:不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略。GiST索引定义的特定操作符可以用于特定索引策略。PostgreSQL的标准发布中包含了用于二维几何数据类型的GiST操作符类,比如,一个图形包含另一个图形的操作符“@>”,一个图形在另一个图形的左边且没有重叠的操作符“<<”,等等

    4. SP-GiST:SP-GiST是“Space-Partitioned GiST”的缩写,即空间分区GiST索引。它是从PostgreSQL9.2版本开始提供的一种新索引类型,主要是通过一些新的索引算法来提高GiST索引在某种情况下的性能

    5. GIN:反转索引,可以处理包含多个键的值,如数组等。与GiST类似,GIN支持用户定义的索引策略,可通过定义GIN索引[…]

4.9.3 创建索引

  1. 语法:

    CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ 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 ]
  2. 简单语句:

    CREATE [UNIQUE] INDEx 索引名 ON 表(字段)

4.9.4 并发创建索引

  1. 使用并发创建索引加快运行速度

  2. 语法:使用CONCURRENTLY关键字

    CREATE INDEX CONCURRENTLY 索引名 ON 表(字段);
  3. 重建索引不支持CONCURRENTLY关键字

  4. 如果在创建索引过程中强行取消,可能会留下一个无效索引,但这个无效索引在插入修改时候依旧生效,查找时候不生效等问题,删除就好了

    SROP INDEX 索引名;

4.9.5 修改索引

  1. 语法:

    ALTER INDEX 索引名 RENAME TO 新索引名
    ALTER INDEX 索引名 SET TABLESPACE 新表空间名
    ALTER INDEX 索引名 SET ( storage_parameter = value [, ... ] )
    ALTER INDEX 索引名 RESET ( storage_parameter [, ... ] )

4.9.6 删除索引

  1. 语法:

    DROP INDEX [ IF EXISTS ] 索引名 [, ...] [ CASCADE | RESTRICT ]

最后更新于