postgresql索引介绍【转】

原文:http://www.cnblogs.com/daduxiong/archive/2010/08/17/1801588.html

创建索引通常能够提高数据库的性能,使查询速度大幅提高。同时索引的存在也为数据库中的数据维护带来的负面影响,增加的数据库与系统的资源消耗。

适当的建立索引总能利大于弊。
postgresql数据库中可以创建多字段、唯一、函数、部分索引多种类型的索引。可能基于主要面向OLTP系统的应用没有引入位图索引(个人猜测)。

测试表:

CREATE TABLE test1 (
  id integer,
  content varchar
  );

 

查询语句:

SELECT content FROM test1 WHERE id = constant;

 

在没有索引的情况下,数据库需要一行行的对表test1进行扫描,test1含有多少数据块就需要扫描多少数据块,对于想要获取非常少量数据的情况下,大量的IO开销显的非常重要,对系统会带来严重的影响。通过创建索引,大大减少了数据库的扫描块数,减少了数据匹配的验证次数,更少更快的扫描路径,提高查询的性能。同样能够提高带有查询语句的delete、update操作的性能。
创建索引:

CREATE INDEX test1_id_index ON test1 (id);

 

删除索引:

DROP INDEX test1_id_index;

 

 

并行创建:
索引创建时需要与表数据保持同步,执行创建语句时系统需要对表进行锁定,期间将会对表的delete、update、insert事务进行阻塞。在生产系统中创建索引需要注意创建的时间,如果对大数据量的表创建索引时,更应该选在系统空闲时。
为了加快索引的创建速度postgresql引入了CONCURRENTLY选项,对索引进行并发创建。CONCURRENTLY选项能够使系统在不阻塞write操作的情况下执行索引创建。其实质是执行两次的表扫描,尽管解决了write的问题,但是需要更多的IO和CPU开销。

以下是CREATE INDEX语法:

复制代码
代码
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace ]
[ WHERE predicate ]
复制代码

 

转载于:https://www.cnblogs.com/Leo-Forest/archive/2012/11/06/2756721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值