Chapter 9. GiST 索引

关于 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).

伯克利的例子 里面有一个该方法的概述并且演示了用于 2D 方形,多边形,整形(时间)间隔 和文本(text)的空间的索机制(参阅 GiST at Berkeley).。在方形的例子里,我们可以预见到使用 GiST 索引时的性能提升; 在我的机器上它的确是这样的,但是我没有很多的方形记录来检验它. 其他例子同样工作了,除了多边形(polygONs):我在执行下面命令时收到一个错误

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. 我用原始的 Makefile (HP-UX)没能成功, 所以我重新编排了一下来自古老的 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-tree 的使用的例子感兴趣.