索引方式:唯一索引,主键索引,多属性索引,部分索引,表达式索引.

索引类型:B-Tree,Hash,GiST,GIN以及表达式索引

PostgreSQL所有索引都是“从属索引”,也就是说,索引在物理上与它描述的表文件分离。

索引也是对象,在表pg_class里有记录。

索引的内部结构与索引的访问方法(索引类型)相关。所有访问方法都通过页面来组织索引的内部结构,这样可以使用存储管理器提供的接口来访问索引。

索引方式

多属性索引:如果一个索引定义多一个一个属性,就称为多属性索引,用于组合查询。

PostgreSQL中的B-Tree,GiST,GIN都支持多属性索引。最多支持32个属性。

不仅可以用表中的属性,而且还可以用函数或者表达式计算得到的值作为属性索引。

部分索引:建立在表上的子集的一个索引,该子集有一个表达式定义(表达式就是部分索引谓词)。

CREATE INDEX STU_NAME_INX ON STUDENT(NAME) WHERE (ID > 10 AND ID <20);

使用部分索引,能够减小索引规模,提高索引查询效率。

表达式索引:可以建立在函数或者从表中一个或者多个属性计算出来的标量表达式上。

CREATE INDEX STU_LOW_NAME_IDX ON STUDENT(LOWER(NAME));

表达式索引,只有在查询是使用与创建时相同的表达式才有作用。

部分索引谓词跟表达式索引的表达式都会存储在pg_index表indexprs属性中。 

在创建索引的时候,会根据表达式计算出实际索引值的范围,这会导致插入跟新速度变慢。

索引类型

B-Tree:一种类似于B+数的数据结构来存储数据的键值。

支持比较查询跟范围查询(>,=,<)。

Hash:Hash索引会使用hash函数对索引关键字进行散列,Hash只能处理=操作。

GiST:通用搜索树,这个需要单独来学习。

GIN:倒排索引,可以处理包含多个键的值(例如数组)。跟GiST类似。 

索引相关系统表

pg_am:

postgres=# select count(*) from pg_am;
count
-------
5
(1 row)

分别为:btree,hash,gist,gin,spgist。

如果是做数据库二次开发的,可以关注后面13个字段,是提供13个模块的接口函数。

pg_index:

创建个索引,会再pg_class创建个添加一条记录,也会再pg_index添加一条。

pg_index用于记录索引的相关信息。

几个重要字段说明:

  indexrelid   该索引在pg_class里的OID。

  indrelid     表示索引依赖的的基表的OID。

  indisvalid 为真,那么可用于查询,否则表示该索引不完善,需要在INSERT/UPDATE操作时更新。

  indkey 这为一个数组,记录这个索引在基表那些字段上面建立了索引,如果数组里有值为0,那么索引属性在表属性上是一个表达式。

  indexprs 索引的表达式

pg_opclass:

每一个索引类型并不直接设定该类型的索引所要操作的数据类型。该表表明了索引索引方法在操作特定数据

类型的时候,需要使用的的操作集合。

还有几个系统视图,都是对索引操作类型的说明

pg_opfamily:

pg_amop:

pg_amproc:

 

  

PostgreSQL索引描述的更多相关文章

  1. PostgreSQL索引介绍

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...

  2. 从一个实例谈谈postgresql索引锁

    最近客户在使用我司开发的数据库时,报告了如下问题(也不能算是问题,就是疑惑吧),环境如下: OS : Red Hat Enterprise Linux Server release 6.7 (Sant ...

  3. PostgreSQL索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值   [作者 高健@博客园  luckyjackgao@gmail.com] 本页目的,是起到索引其他所有本人所写文档的作用: 分类一:PostgreSQL基础 ...

  4. PostgreSQL 索引坏块处理

    今天应用反应有张表查询报错,报错信息如下 back=# select max(create_time) from public.tbl_index_table where create_time> ...

  5. PostgreSQL索引思考

    当在看Monetdb列存行只支持IMPRINTS和ORDERED这两种索引,且只支持定长数值类型时,就在思考,对于列存,还有必要建索引吗?在PostgreSQL的索引就要灵活很多,我对常用列建合理的索 ...

  6. postgresql 索引

    1.B-tree索引 create index idx_contacts_name on contacts(name); 2.数组索引 create index idx_contacts_phone  ...

  7. PostgreSQL 索引膨胀

    索引膨胀,主要针对B-tree而言 索引膨胀的几个来源: 大量删除发生后,导致索引页面稀疏,降低了索引的使用效率: PG9.0之前的版本,vacuum full会同样导致索引页面稀疏: 长时间运行的事 ...

  8. PostgreSQL内部结构与源代码研究索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值 luckyjackgao@gmail.com 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的内部结构和源代码研究相关文摘 ...

  9. PostgreSQL基础知识与基本操作索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ...

随机推荐

  1. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

  2. Lua 5.3 协程简单示例

    Lua 5.3 协程简单示例 来源 http://blog.csdn.net/vermilliontear/article/details/50547852 生产者->过滤器->消费者 模 ...

  3. poj 3484 Showstopper

    Showstopper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2236   Accepted: 662 Descri ...

  4. javascript中的变量、作用域和内存问题

    1.变量 变量的值的类型:基本类型值和引用类型值两种. 基本类型:Undefined.Null.Boolean.String.Number,这五类基本数据类型的值在内存中占有固定大小的空间,因此保存在 ...

  5. 让普通 Java 类自动感知 Activity Lifecycle

    背景 在 Android 开发中,我们都很熟悉 Activity 的 Lifecycle,并且会在特定的 Lifecycle 下执行特定的操作.当然,我们清楚 Lifecycle 本身是带有 Andr ...

  6. 解决mysql启动失败报1067错误

    最近做项目使用 mysql 数据库 ,因为卸载了鲁大师造成了数据库文件缺失.重装mysql数据库后启动出现了1067错误,详情如下 在网上查了错误原因,将my.ini文件下的默认搜索引擎换成了 myi ...

  7. 常见的XSS攻击代码

    第一类: <tag on*=*/> 在html标签事件中触发,典型的是on*事件,但是这种触发模式的缺陷在于不能直接触发所以更多的需要配合使用. eg: 1.使html元素占据整个显示页面 ...

  8. 浅谈web移动端适配问题

    一.布局方案 目前在解决移动端页面适配问题方案选择上,目前用得比较多是百分比布局,弹性布局flex,rem布局,本文将重点跟大家探讨rem布局. 二.viewport 在介绍rem布局之前,首先跟大家 ...

  9. Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

    通过前面两篇博客,我们介绍了Linux系统的权限管理.Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这在Linux只能对于一个文件只能有所有者权限 ...

  10. 身为运维的你,怎么掌握python才不会失业

    以前,我们都说Python是运维工程师的未来:现在,为什么大家都说不会Python的运维都将失业?运维必须懂开发,特别是python开发,已经形成大家的共识,不懂开发的运维,路会越走越窄. 而现在的情 ...