用户指南和参考

使用 Spatial 索引的指南

DB2 Spatial Extender 使用 Spatial 索引来提高 Spatial 查询的性能。 考虑最基本和可能最流行的 Spatial 查询-框查询。 此查询要求 DB2 Spatial Extender 返回完全在或部分在用户定义框内的所有几何图形。 若索引不存在,DB2 Spatial Extender 必须将所有几何图形与框进行比较。 然而,DB2 Spatial Extender 可通过索引找出满足下列条件的所有索引项: 左下角坐标大于或等于框的左下角左坐标且右上角坐标小于或等于框的右上角坐标。 因为索引是按此坐标系排序的,所以 DB2 Spatial Extender 能快速获取侯选几何图形的列表。 刚才描述的过程称作第一次处理

第二次处理确定每个侯选几何图形的包络是否与该框相交。 因为其网格单元的包络与该框相交而符合第一次处理的几何图形可能自身具有不与该框相交的包络。

第三次处理将侯选几何图形的实际坐标与框比较, 以确定该几何图形的任何部分是否实际上在框内。 最后这个相当复杂的比较过程对由全体几何图形的子集组成的侯选几何图形的列表进行操作,该子集已通过前两遍处理显著减少。

除 EnvelopesIntersect 函数外,所有 Spatial 查询都会执行这三次处理。 EnvelopesIntersect 函数只执行前两次处理。EnvelopesIntersect 函数是为下列显示操作设计的, 这些显示操作经常利用它们自己的内置剪切例程因而不需要进行第三次处理。

选择网格单元大小

几何图形包络的不规则形状使选择网格单元大小变得复杂。 因为这种不规则性,某些几何图形包络与几个网格相交, 而其他包络则落在单个网格单元内。 反之,根据数据的 Spatial 分布,某些网格单元与许多几何图形包络相交。

为使 Spatial 索引顺利工作,必须选择正确的网格数目和大小。 考虑包含大小一致的几何图形的 Spatial 列。 在此情况下,单个网格级就足够了。 从包围平均几何图形包络的网格单元大小开始。 当测试您的应用程序时,可能发现增加网格单元大小会提高查询的性能。 这是因为每个网格单元包含多个几何图形,且第一遍处理能更快地废弃不合格的几何图形。 然而,您将发现当继续增加单元大小时,性能将开始下降。 这是因为最终第二遍处理将必须处理更多侯选者。

选择级数

若您想要建立索引的对象具有大约相同的相对大小, 则可使用单个网格级。 虽然这是正确的,但不是所有列都将包含具有相同相对大小的几何图形。 通常可将 Spatial 列的几何图形分为几个大小间隔。 例如,考虑一个道路网络,可将其中的几何图形分为街道、主要道路和公路。 所有街道的长度大约相同,可分为一个大小间隔。 主要道路和公路也是这样。 因此,表示一个大小间隔的街道可分为第一网格级,道路网络可分为第二网格级, 主要公路可分为第三网格级。另一示例包括一个县区列, 该县区包含被更大的郊区包围的较小市区群。 在此例中,有两个大小间隔和两个网格级,一个用于较小的市区,另一个用于较大的郊区。 这些情况非常普通且需要使用多级网格。

要选择每个网格级的单元大小, 选择比每个大小间隔稍大的网格单元大小。 通过对 Spatial 列执行查询测试索引。

每个附加的网格级需要额外的索引扫描。 尝试稍微将网格调大或调小,以确定是否可获得明显的性能提高。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]