ArcSDE空间索引

来源:互联网 发布:c语言生成的exe文件 编辑:程序博客网 时间:2024/05/17 07:46

为了提高空间查询的性能,ArcSDE采用空间索引的机制。是一个覆盖整个要素类的两维索引,类似于一般的道路图上的索引网格。ArcSDE可以赋予三层空间索引网格,每个网格层都具有自己的格网大小。第一层网格为必需,它的格网尺寸最小;而第二和第三层可选,它们的网格可以通过设置为0使之无效。如果有效,第二层网格大小必须至少比第一层网格大三倍,而第三层网格大小也必须至少比第二层网格大三倍。

建立空间索引

每次向business表添加要素类时,会为它自动创建一个的空间索引。ArcSDE服务器在整个要素类的生命周期内都管理它的空间索引。当插入、更新或者删除要素时,空间索引会被自动更新。load-only模式会禁止空间索引的管理,直到载入数据结束。这种做法充分地提高了载入的性能,并且在大批量载入数据时必不可少。Load-only模式不允许SQL之外的查询操作。

数据载入结束后,返回normal模式,空间索引就可用了。从normal I/O模式到load-only I/O模式的转换会重建空间索引。在normal I/O模式下,插入、更新或者删除要素会更新空间索引。

ArcSDE首先将每个要素的范围覆盖到最低层的网格,获得网格数量。如果要素超过四个格网,ArcSDE将该要素提升到更高层次的网格(如果定义了更高层次的网格)。ArcSDE会一直提升要素到更高层次网格,直到该要素位于四个格网之内或者已到达最高层次的网格水平。在最高一层网格,图形可以被超过四个的格网索引。

ArcSDE将要素的格网和相应的shape ID、和要素范围一起添加到空间索引表中。网格层次和每个格网都进行编码,如下例:该要素类有两个网格层次。面状图形101位于第1层的第4号格网,那么空间索引表中就添加了一条记录,因为该要素在四个格网之内(事实上是一个格网)。面状要素102的范围位于第一层网格的格网1到8中。因为该要素的范围超出了四个格网,所以该要素被提升到第二层,在第二层中它位于两个格网之内。因此,要素102被第二层网格索引,并在空间索引表中添加了2条记录。

空间查询和空间索引

空间查询,比如查找某个州边界内的所有湖泊,就会使用空间索引。空间索引会被使用,除非SE_stream_set_spatial_constraints函数中的查找顺序设置为SE_ATTRIBUTE_FIRST。当查找顺序设为SE_ATTRIBUTE_FIRST时,ArcSDE忽略空间索引,而采用属性条件作为where子句查找满足条件的要素类中的记录。当使用空间索引时,ArcSDE通常按照下面的过程执行查询:

定义范围。范围可以之间由应用程序定义,比如ArcMap的zoom in工具定义的范围。此外,范围也可以由其他的要素范围来确定。

连接(Join)空间索引表和要素表,返回与该范围相交的格网。

连接(Join)要素表和business表,应用属性条件中的where子句进行更进一步的查询。

调整空间索引

格网的大小影响空间索引表的大小。设置空间索引在于寻找格网大小的平衡点—较小的格网会使每个要素对应较多的格网,也就需要空间索引表中的更多记录。由于客户端应用程序和空间数据的特征在各个系统之间差异很大,所以没有单一的适合所有情形的空间索引,有时需要尝试不同的格网大小和网格层次的配置。

sdelayer命令有几个操作选项可以通过改变格网大小和添加新的网格层次优化空间索引(’alter’操作选项)。‘stats’和‘si_stats’操作显示当前空间数据特征和空间索引信息。

如下为一些提高空间查询性能的方法:

考虑需要多少个网格层次,而且记住ArcSDE服务器为每个网格层次扫描一次空间索引表。经常一个网格层次对一个要素类而言就是最好的解决方法,即使认为将几何图形分布在多个不同的网格层次可以减少空间索引表的入口。

对于纯点状类型的要素类,使用一个网格层次,而且考虑增大格网大小。空间查询一般处理点状图形要比其他类型快。

监视空间索引。如果数据经常发生变化,调整空间索引会很困难。调整措施取决于空间数据的结构。当空间数据变化时,定期访问空间索引。

根据具体应用建立空间索引。将应用程序窗口大小和空间索引网格大小相匹配。

对于未知的或者变化的应用程序窗口,开始定义一个网格层次,格网大小为要素平均范围大小的3倍。可以利用如下的查询获得要素的平均大小:

select (avg(emaxx - eminx) + avg(emaxy - eminy)) / 2 from f

(where is the layer number of the feature class)

根据数据种类设计要素类,比如类型、几何大小、和分布情况。有时精心设计的要素类会更加充分地提高空间查询的性能。

查看空间索引统计值

sdelayer命令的空间索引统计操作‘si_stats’,能够有助于确定优化的空间索引网格大小。优化网格大小取决于所有要素几何图形的空间范围、要素几何空间范围的差异、和要对该要素类进行的查询类型。以下是一个si_stats输出的例子:

$ sdelayer -o si_stats -l victoria,parcels -u av -p mo -i sde81

输出结果显示每个网格层次的统计值:

网格层次和格网大小

当前网格层次总的空间索引记录数

当前网格层次种存储的图形总数

每个图形的空间索引比率

分组的图形数量和百分比。表明图形空间索引在该网格层次如何分组。

每个网格的图形平均数

每个网格的最大数量

完全在一个网格中的图形的百分比

ArcSDE是基于不同类型的DBMS采用的不同空间索引建构方式,我们知道,在数据库中建立索引后,查询速度可以得到有效的提高。一般情况下,我们遇到的ArcSDE的索引都是多层次Index Grid的方法。即对一个要素类建立三级的Grid Index记录,请注意看我们要素一个要素类时Geometry中的属性,会有Grid 1、Grid 2和Grid 3三个参数,其中一般只建立了一个Grid。所谓Grid Index是人为将整个范围的要素类根据Grid的参数划分为N个网格,然后在Schema表(S表)中记录处于这个网格内的要素,如下图:

上图中是ARCSDE针对不同数据库采用的索引类型.