选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 16 / 15 / 14
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

52.2. 可扩展性 #

传统上,实现一种新的索引访问方法意味着大量艰难的工作。必须理解数据库的内部机制,例如锁管理器和预写式日志。GiST接口具有很高的抽象层次,只要求访问方法实现者实现被访问数据类型的语义。GiST层本身会处理并发、日志记录以及树结构的搜索。

这种可扩展性不应与其他标准搜索树在可处理数据方面的可扩展性相混淆。例如,PostgreSQL支持可扩展的 B-树和 hash 索引。这意味着你可以用PostgreSQL在任意数据类型上构建 B-树或 hash 索引。但 B-树只支持范围谓词(<=>),而 hash 索引只支持等值查询。

因此,如果你用PostgreSQL的 B-树为一个图像集合建立索引,你只能发出诸如imagex 是否等于 imageyimagex 是否小于 imagey以及imagex 是否大于 imagey之类的查询。取决于你如何在这种上下文中定义等于小于大于,这可能仍然有用。不过,使用基于GiST的索引,你就可以构造出能够提出特定领域问题的查询方式,例如找出所有马的图片或者找出所有曝光过度的图片

要让一个 GiST 访问方法运行起来,只需实现 七个用户定义的方法,这些方法定义了树中键的行为。当然,要支持 复杂查询,这些方法本身也必须足够巧妙;但对于所有标准查询 (B-tree、R 树等),它们都相对直接。简而言之, GiST 把可扩展性与通用性、代码复用以及清晰 的接口结合了起来。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。