postgresql_索引

1.简介:

索引是用于加速从数据库检索数据的特殊查找表。

索引为出现在索引列中的每个值创建一个条目。

2.特点:

索引使用SELECT查询和WHERE子句加速数据输出,但是会减慢使用INSERTUPDATE语句输入的数据。

3.创建:

CREATE INDEX index_name ON table_name;

单列索引,CREATE INDEX index_name ON table_name (column_name);

多列索引,CREATE INDEX index_name ON table_name (column1_name, column2_name);

唯一索引【该字段不能重复】,CREATE UNIQUE INDEX index_name on table_name (column_name);

4.删除:

DROP INDEX index_name;

5.规则:

应该避免在小表上使用索引。

不要为具有频繁,大批量更新或插入操作的表创建索引。

索引不应用于包含大量NULL值的列。

不要在经常操作(修改)的列上创建索引。

6.类型:

根据算法不同,索引分为:

B-tree,多层,排列成某些属性的等式,及以下运算符:<,>,=,between in,null,like

Hash,简单的=,不支持多列索引

GiSTSP-GiST,几何数据

GIN,线性数据

缺省为B-tree索引。

7.组成:

排序规则模式,

排序规则,

运算符类别模式,

运算符类别,

排序顺序, DESC倒叙,ASC正序

nulls排序,null在not null之前,或者在not null之后

8.分析:

explain analyze

关闭全表扫描seq scan(set session enable_seqscan = false;)

关闭索引扫描index scan(set session enable_indexscan = false;)

关闭索引条目扫描bitmap scan(set session enable_bitmapscan = false;)

数据量小时,seq scan比index scan有效。index scan发生两次I/O:1.读取索引块,2.读取数据块。

PS,即使存在index,也可能会因为数据量小被系统优化成seq scan。

9.扫描种类:

Bitmap heap scan:合并索引访问的结果子集时会用到这种方式 ,通常用到 "or","and"时,出现Bitmap heap scan;

index scan:普通的索引扫描, 一次只读一条索引项,一个 PAGE面有可能被多次访问;

bitmap scan :一次性将满足条件的索引项全部取出,并在内存中进行排序, 然后根据取出的索引项访问表数据;

Seq Scan:从表的第一行开始顺序扫描,一直扫描到最后满足查询条件的记录。

10.自主优化:

pgsql也会根据自身判定,做一部分自主优化,比如:

设置了索引,但是未被使用;

未设置索引,但是却使用了索引;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值