第四十五章.GiST 索引

关于 GIST 的信息在 http://GiST.CS.Berkeley.EDU:8000/gist/ ,有关更多不同索引和排序方法的信息在http://s2k-ftp.CS.Berkeley.EDU:8000/personal/jmh/。并且在伯克利的数据库站点有更多的有趣的读物 http://epoch.cs.berkeley.edu:8000/.
作者:这个节选源自一封由 Eugene Selkov Jr。发过来的电子邮件,包含很多关于 GiST 的有用信息.希望我们在将来能学习到更多的东西并且对这个信息进行更新.- thomas 1998-03-01
我不能说我对这些东西认识得很深,但至少我(几乎是)成功的把 GiST 例子移植到 linux 里.GiST 访问模式现在已经在 postgres 代码树里(src/backend/access/gist)。

伯克利的例子 里面有一个该方法的概述并且演示了用于 2D 方形,多边形,整形(时间)间隔和文本(text)的空间的索引机制(参阅 GiST 在伯克利)。在方形的例子里,我们可以预见到使用 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 (HPUX)没能成功,所以我重新编排了一下古老的 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);
记住这些!我想它可能影响好一些老的 Postgres 版本,然后试一下查询.我的系统在大约十分钟内就不行了,然后我只有宕掉 postmaster.