目录
本文主要针对的是地理数据,地理数据的特点是具有二维或三维的坐标数据,且都是基于PostGIS扩展对地理数据的操作来说的。
空间索引是空间数据库的关键所在,空间索引强,空间数据库支持大规模的数据才有意义,可以说空间索引的好坏决定了数据库的强弱。R-tree索引经常用于地理数据,GIST索引也是PostGIS中用于地理数据的推荐索引,从PostGIS 0.6开始,便不推荐直接使用R-tree索引地理数据了,转而推荐在GiST框架内实现的R-tree索引。那么,PostGIS为什么要做出这样的选择呢?R-tree有什么问题呢?GiST之于R-tree有什么优势呢,它们之间又有什么区别和联系?
PostGIS的FAQ中有人问到了这个问题,给出的答案是:测试结果表明,两者的性能相差不大,当然还是R-tree更快,而且在PostgreSQL中的R-tree实现有缺陷:
- 不能处理超过8k的要素,GiST可以;
- PostgreSQL中实现的R-tree不是null-safe的,如果geometry有null值,则索引构建会失败。
GIST索引
GiST其实不是一个真正意义上的索引,它是一个索引实现模板,提供了一些api,B-tree和R-tree都可以在GiST的框架内实现。
GiST原理
GiST是一种平衡树的数据结构,它的关键在于key是可以定制的,例如R-tree本身的ke