Oracle Spatial的空间索引用SPATIAL_INDEX表示,在内部主要是采用R树实现,能加快空间操作符和空间函数在Oracle数据表的SDO_GEOMETRY字段(或列)上的执行速度。R树是类似于B树的分层结构,它将几何体的矩形逼近(也称为边界矩形)存储为关键值。
如图5-2所示,以MVDEMO方案中的CUSTOMERS表为例,左边图上的黑点表示每个CUSTOMER的位置,它们以几何点的形式存储在含有SDO_GEOMETRY字段中对应的LOCATION列。对于LOCATION列中的每一个SDO_GEOMETRY,R树都用一个最小限定矩形MBR将其包围起来,并以此创建一个MBR的层次结构。在图5-2中,代表位置的点聚集形成三个结点A、B、C。每个结点关联的MBR都将对应子树中数据的位置包围起来,这些MBR又进一步聚集成根结点。以这样的方式,一个R树就可以用一个表中的SDO_GEOMETRY数据MBR构造出一个层次的树状结构。然后,R树使用这个MBR的树形层次结构帮助查询找到相应的R树分支,并最终找到数据表相应的行。
图5-2 点集上的R树示例
图5-3描述了Oracle中如何存储R树索引。树的逻辑结构被存储为以MDRT开头的数据表中。树结构的每个结点用表中单独的行存储。空间索引的元数据存储在视图USER_SDO_INDEX_METADATA中。该视图存储空间索引名称(SDO_INDEX_NAME)、存放索引的表(SDO_INDEX_TABLE)、R树索引的根ROWID、R树结点的分支因子以及其他的相关参数。通过这个视图,可以确定给定空间索引对应的空间索引表(MDTR_开头的表)。另外,也可以参考更加简单的USER_SDO_INDEX_INFO视图。
图5-3 Oracle Spatial中R树的存储(www.xing528.com)
执行下列查询语句:
可以得到以下结果:
从查询结果可以看出,CUSTOMERS数据表中的LOCATION字段对应的R树空间索引的信息存放在MDRT_1682A$表中(注意:这个表的名称是创建索引的时候由Oracle自动命名的,索引在机器上可能不是这个名称)。该表的结构与数据如图5-4所示。
图5-4 CUSTOMERS数据表中LOCATION字段对应R树的存储表结构与数据
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。