设为首页 收藏本站
查看: 943|回复: 0

[经验分享] postgresql 索引类型

[复制链接]
累计签到:1365 天
连续签到:1 天
发表于 2016-11-21 09:07:46 | 显示全部楼层 |阅读模式
  postgresql提供了B-tree,R-tree,GiST和hash索引类型。不同的索引类型适合特定的查询类型。
绝大多数数据库都支持B-tree索引类型,postgresql默认的create index语句也是创建B-tree索引。

  R-tree:
R树是一种用于处理多维数据的数据结构,用来访问二维或者更高维区域对象组成的空间数据.R树是一棵平衡树。树上有两类结点:叶子结点和非叶子结点。每一个结点由若干个索引项构成。对于叶子结点,索引项形如(Index,Obj_ID)。其中,Index表示包围空间数据对象的最小外接矩形MBR,Obj_ID标识一个空间数据对象。对于一个非叶子结点,它的索引项形如(Index,Child_Pointer)。 Child_Pointer 指向该结点的子结点。Index仍指一个矩形区域,该矩形区域包围了子结点上所有索引项MBR的最小矩形区域。
postgresql提供了支持空间存储的数据类型:

DSC0000.gif DSC0001.gif 代码



Name    Storage Size    Representation    Description
point    16 bytes    Point on the plane    (x,y)
line    32 bytes    Infinite line (not fully implemented)    ((x1,y1),(x2,y2))
lseg    32 bytes    Finite line segment    ((x1,y1),(x2,y2))
box    32 bytes    Rectangular box    ((x1,y1),(x2,y2))
path    16+16n bytes    Closed path (similar to polygon)    ((x1,y1),...)
path    16+16n bytes    Open path    [(x1,y1),...]
polygon    40+16n bytes    Polygon (similar to closed path)    ((x1,y1),...)
circle    24 bytes    Circle    <(x,y),r> (center and radius)


  参考文档:http://www.postgresql.org/docs/8.3/static/datatype-geometric.html
在这些数据类型的列上可以创建R-tree类型的索引。举例说明:



wyz=# CREATE TABLE abc (shape polygon);
CREATE
wyz=# CREATE INDEX spacial_idx ON abc USING RTREE (shape);
CREATE

相对R-tree做深一步了解可以看以下Guttman的《R-Trees - A Dynamic Index Structure for Spatial Searching》。
  Hash
查看文档说hash类型的索引常用于进行"="操作的数据列。其中也著名hash类型索引相对B-tree类型的索引不管是存储还是性能都比较差,不建议使用hash类型索引。
创建hash类型索引的过程实质是对数据进行hash函数操作,然后存储hash值。从hash函数原理的角度去考虑就能很快发现hash类型索引的劣势在哪了。对在一个OLTP的数据库中采用hash类型索引的表进行DML操作时,不仅增大CPU的开销,也没有节省存储的消耗。
  GiST
通用搜索树(Generalized Search Tree),与其说是一种索引类型,不如说是建立索引的平台或者模板。利用Gist可以建立B-tree,R-tree或者其他的类型索引。
对GiST感兴趣可以参考GiST的项目网站http://gist.cs.berkeley.edu/
  postgresql的索引创建语法:



CREATE [ UNIQUE ] INDEX indexname ON table
         [ USING indextype ] ( functionname ( column [, ...] ) [ opclass ] )

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303225-1-1.html 上篇帖子: PostgreSQL 8.0.2 应用报告 下篇帖子: PostgreSQL 查看数据库,索引,表,表空间大小
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表