↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 9 章 GiST 索引

Gene Selkov

关于 GIST 的信息在 http://GiST.CS.Berkeley.EDU:8000/gist/, 关于不同索引和排序方案的更多内容在 http://s2k-ftp.CS.Berkeley.EDU:8000/personal/jmh/。 另外还有一些有意思的阅读材料在 http://epoch.cs.berkeley.edu:8000/ 和 http://www.sai.msu.su/~megera/postgres/gist/。

作者

这段摘录来自 Eugene Selkov, Jr.() 发送的一封电子邮件,其中包含关于 GiST 的有用信息。希望我们将来能学到更多并更新这些信息。 - thomas 1998-03-01

好吧,我不能说完全理解了其中的原理,但我(几乎)成功地把 GiST 示例移植到了 linux。GiST 访问方法已经在 postgres 树中(src/backend/access/gist)。

伯克利的示例 附带这些方法的概述,并演示了二维矩形、多边形、整数区间和文本的空间索引机制(另见 伯克利的 GiST)。 在矩形示例中,使用 GiST 索引本应看到性能提升;它对我来说确实有效,但我没有规模足够大的矩形集合来验证这一点。其他示例也都有效,只有多边形除外:执行

test=> CREATE INDEX pix ON polytmp
test-> USING GIST (p:box gist_poly_ops) WITH (ISLOSSY);
ERROR:  cannot open pix

(PostgreSQL 6.3               Sun Feb  1 14:57:30 EST 1998)

我没搞懂这条错误消息的含义;它似乎是我们更应该去问开发者的问题(另见下面的注 4)。我这里想建议的是,你们当中的 linux 用户(linux==gcc?)去取上面提到的原始源码并应用我的补丁(见附件),然后告诉我们你们的感受。我觉得很酷,但周围有这么多能人,我不想把它扣着不放。

关于这些源码的几点说明:

1. 我没能用上原始的(HP-UX)Makefile,于是把古老的 postgres95 教程里的 Makefile 改了改来干活。我试着让它通用一些,但我写 Makefile 的水平很差——只是做了些照猫画虎的活儿。抱歉,不过我想它现在比原来的 makefile 稍微可移植一点了。

2. 我直接在 pgsql/src 之下构建了示例源码(只是把 tar 文件解压在那里)。前面提到的 Makefile 假定它位于 pgsql/src 下一级(在我们的例子中即 pgsql/src/pggist)。

3. 我对 *.c 文件的改动都只是关于 #include、函数原型和类型转换。除此之外,我只是扔掉了一堆未用的变量,并加了几个括号来取悦 gcc。希望我没有搞砸太多 :)

4. polyproc.sql 中有一条注释:

-- -- there's a memory leak in rtree poly_ops!!
-- -- CREATE INDEX pix2 ON polytmp USING RTREE (p poly_ops);

收到!!我以为它可能与几个版本之前的 PostgreSQL 有关,于是试着执行了该查询。我的系统疯了,大约十分钟后我不得不干掉了 postmaster。

我会继续研究一阵子 GiST,但我也希望看到更多 R 树用法的示例。

提交更正

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