sde for DB2的空间索引扩展
分享
在oracle数据库中存在着Domain索引,称为域索引,实际上就是应用程序自定义索引,在DB2中也有类似的对象,为index extension对象,
在DB2中使用db2look命令查看某个空间表的定义的时候,其表的定义信息通常如下:
CREATE TABLE "SDE "."STREETS" (
"OBJECTID_1" INTEGER NOT NULL ,
"OBJECTID" DECIMAL(9,0) ,
"L_F_ADD" DECIMAL(9,0) ,
"L_T_ADD" DECIMAL(9,0) ,
"R_F_ADD" DECIMAL(9,0) ,
"R_T_ADD" DECIMAL(9,0) ,
"PREFIX" VARCHAR(2) ,
"PRETYPE" VARCHAR(20) ,
"NAME" VARCHAR(40) ,
"TYPE" VARCHAR(20) ,
"SUFFIX" VARCHAR(2) ,
"PREFIX1" VARCHAR(2) ,
"PRETYPE1" VARCHAR(20) ,
"NAME1" VARCHAR(40) ,
"TYPE1" VARCHAR(20) ,
"SUFFIX1" VARCHAR(2) ,
"PREFIX2" VARCHAR(2) ,
"PRETYPE2" VARCHAR(20) ,
"NAME2" VARCHAR(40) ,
"TYPE2" VARCHAR(20) ,
"SUFFIX2" VARCHAR(2) ,
"PREFIX3" VARCHAR(2) ,
"PRETYPE3" VARCHAR(20) ,
"NAME3" VARCHAR(40) ,
"TYPE3" VARCHAR(20) ,
"SUFFIX3" VARCHAR(2) ,
"PREFIX4" VARCHAR(2) ,
"PRETYPE4" VARCHAR(20) ,
"NAME4" VARCHAR(40) ,
"TYPE4" VARCHAR(20) ,
"SUFFIX4" VARCHAR(2) ,
"PREFIX5" VARCHAR(2) ,
"PRETYPE5" VARCHAR(20) ,
"NAME5" VARCHAR(40) ,
"TYPE5" VARCHAR(20) ,
"SUFFIX5" VARCHAR(2) ,
"SHIELD" VARCHAR(1) ,
"HWY_NUM" VARCHAR(5) ,
"FCC" VARCHAR(3) ,
"ACC" VARCHAR(1) ,
"TOLL" VARCHAR(1) ,
"SPEED" DECIMAL(9,0) ,
"ONE_WAY" VARCHAR(2) ,
"F_ZLEV" DECIMAL(9,0) ,
"T_ZLEV" DECIMAL(9,0) ,
"POSTAL_L" VARCHAR(5) ,
"POSTAL_R" VARCHAR(5) ,
"GEONAME_L" VARCHAR(40) ,
"GEONAME_R" VARCHAR(40) ,
"STATE_L" VARCHAR(2) ,
"STATE_R" VARCHAR(10) ,
"STATE_NAME" VARCHAR(40) ,
"COUNTRY" VARCHAR(3) ,
"SHAPE" "DB2GSE "."ST_MULTILINESTRING" )
COMPRESS YES
IN "USERSPACE1" ;
-- DDL Statements for indexes on Table "SDE "."STREETS"
CREATE INDEX "SDE "."A6_IX1" ON "SDE "."STREETS"
("SHAPE" )
COMPRESS NO
EXTEND USING "DB2GSE "."SPATIAL_INDEX" (.110000e-1,.000000e0,.000000e0) DISALLOW REVERSE SCANS;
其中A6_IX1为一个创建在表streets,SHAPE列上的索引,其所使用索引的类型为DB2GSE.SPATIAL_INDEX,那 DB2GSE.SPATIAL_INDEX
是什么东西,通过db2look 命令也是可以查到其定义:
CREATE INDEX EXTENSION DB2GSE.SPATIAL_INDEX( GS1 DOUBLE,GS2 DOUBLE,GS3 DOUBLE)
FROM SOURCE KEY(GEOMETRY DB2GSE.ST_GEOMETRY)
GENERATE KEY USING DB2GSE.GSEGRIDIDXKEYGEN(GEOMETRY..SRID,
GEOMETRY..XMIN,
GEOMETRY..XMAX,
GEOMETRY..YMIN,
GEOMETRY..YMAX,
GS1,GS2,GS3)
WITH TARGET KEY(SRSID INT, LVL INT,GX INT,GY INT,
XMIN DOUBLE,XMAX DOUBLE, YMAX DOUBLE,
YMAX DOUBLE)
SEARCH METHODS
WHEN CONTAINS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3)
FILTER USING DB2GSE.GSEGRIDIDXFILTER(1, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN WITHIN(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(2, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN EQUALS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(3, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN INTERSECTS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN INTERSECTS2(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX,
W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING CASE WHEN W..SRID BETWEEN 2000000000
AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (W..YMIN > YMAX)
OR (W..YMAX < YMIN) OR (W..XMIN > XMAX) OR (W..XMAX < XMIN) THEN 0 ELSE
DB2GSE.GSEGRIDIDXFILTER(0, W..XMIN,W..XMAX,W..YMIN, W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) END
WHEN INTERSECTS3(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID,
W..XMIN,W..XMAX, W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING CASE WHEN W..SRID
BETWEEN 2000000000 AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (W..YMIN > YMAX)
OR (W..YMAX < YMIN) OR (W..XMIN > XMAX) OR (W..XMAX < XMIN) THEN 0 ELSE
1 END
WHEN WINDOW(WXMN double,WYMN double,WXMX double,WYMX double,WSRID
int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID, WXMN,WXMX, WYMN,WYMX,
GS1,GS2,GS3) FILTER USING CASE WHEN WSRID BETWEEN 2000000000 AND 2000001000
THEN DB2GSE.GSEGRIDIDXFILTWIND(4, WSRID, WXMN,WXMX,WYMN,WYMX, XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) WHEN (WYMN > YMAX) OR (WYMX < YMIN) OR (WXMN > XMAX) OR (WXMX
< XMIN) THEN 0 ELSE DB2GSE.GSEGRIDIDXFILTER(0, WXMN,WXMX,WYMN, WYMX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) END
WHEN WINDOW2(WXMN double,WYMN double,WXMX double,WYMX
double,WSRID int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID, WXMN,WXMX,
WYMN,WYMX, GS1,GS2,GS3) FILTER USING CASE WHEN WSRID BETWEEN 2000000000
AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTWIND(4, WSRID, WXMN,WXMX,WYMN,WYMX,
XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (WYMN > YMAX) OR (WYMX
< YMIN) OR (WXMN > XMAX) OR (WXMX < XMIN) THEN 0 ELSE 1 END
WHEN IDXINTERSECTS(WXMN double,WYMN double,WXMX double,
WYMX double,WSRID int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID,
WXMN,WXMX, WYMN,WYMX, GS1,GS2,GS3) WHEN ALLROWS(P int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGALL(GS1,GS2,GS3)
FILTER USING DB2GSE.GSEGRIDIDXFILALL( XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN OVERLAP(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID,
W..XMIN,W..XMAX, W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(5,
W..XMIN,W..XMAX,W..YMIN, W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN DISTANCE(C DB2GSE.ST_GEOMETRY,R DOUBLE) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPDIST(C..SRID,
C..XMIN,C..XMAX, C..YMIN,C..YMAX, R, GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTDIST(
4, C..XMIN,C..XMAX,C..YMIN,C..YMAX, R, XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3);
从定义上可以看出,WHEN后面的这些method用到了索引。
文章来源:http://blog.csdn.net/liufeng1980423/article/details/6331464
在DB2中使用db2look命令查看某个空间表的定义的时候,其表的定义信息通常如下:
CREATE TABLE "SDE "."STREETS" (
"OBJECTID_1" INTEGER NOT NULL ,
"OBJECTID" DECIMAL(9,0) ,
"L_F_ADD" DECIMAL(9,0) ,
"L_T_ADD" DECIMAL(9,0) ,
"R_F_ADD" DECIMAL(9,0) ,
"R_T_ADD" DECIMAL(9,0) ,
"PREFIX" VARCHAR(2) ,
"PRETYPE" VARCHAR(20) ,
"NAME" VARCHAR(40) ,
"TYPE" VARCHAR(20) ,
"SUFFIX" VARCHAR(2) ,
"PREFIX1" VARCHAR(2) ,
"PRETYPE1" VARCHAR(20) ,
"NAME1" VARCHAR(40) ,
"TYPE1" VARCHAR(20) ,
"SUFFIX1" VARCHAR(2) ,
"PREFIX2" VARCHAR(2) ,
"PRETYPE2" VARCHAR(20) ,
"NAME2" VARCHAR(40) ,
"TYPE2" VARCHAR(20) ,
"SUFFIX2" VARCHAR(2) ,
"PREFIX3" VARCHAR(2) ,
"PRETYPE3" VARCHAR(20) ,
"NAME3" VARCHAR(40) ,
"TYPE3" VARCHAR(20) ,
"SUFFIX3" VARCHAR(2) ,
"PREFIX4" VARCHAR(2) ,
"PRETYPE4" VARCHAR(20) ,
"NAME4" VARCHAR(40) ,
"TYPE4" VARCHAR(20) ,
"SUFFIX4" VARCHAR(2) ,
"PREFIX5" VARCHAR(2) ,
"PRETYPE5" VARCHAR(20) ,
"NAME5" VARCHAR(40) ,
"TYPE5" VARCHAR(20) ,
"SUFFIX5" VARCHAR(2) ,
"SHIELD" VARCHAR(1) ,
"HWY_NUM" VARCHAR(5) ,
"FCC" VARCHAR(3) ,
"ACC" VARCHAR(1) ,
"TOLL" VARCHAR(1) ,
"SPEED" DECIMAL(9,0) ,
"ONE_WAY" VARCHAR(2) ,
"F_ZLEV" DECIMAL(9,0) ,
"T_ZLEV" DECIMAL(9,0) ,
"POSTAL_L" VARCHAR(5) ,
"POSTAL_R" VARCHAR(5) ,
"GEONAME_L" VARCHAR(40) ,
"GEONAME_R" VARCHAR(40) ,
"STATE_L" VARCHAR(2) ,
"STATE_R" VARCHAR(10) ,
"STATE_NAME" VARCHAR(40) ,
"COUNTRY" VARCHAR(3) ,
"SHAPE" "DB2GSE "."ST_MULTILINESTRING" )
COMPRESS YES
IN "USERSPACE1" ;
-- DDL Statements for indexes on Table "SDE "."STREETS"
CREATE INDEX "SDE "."A6_IX1" ON "SDE "."STREETS"
("SHAPE" )
COMPRESS NO
EXTEND USING "DB2GSE "."SPATIAL_INDEX" (.110000e-1,.000000e0,.000000e0) DISALLOW REVERSE SCANS;
其中A6_IX1为一个创建在表streets,SHAPE列上的索引,其所使用索引的类型为DB2GSE.SPATIAL_INDEX,那 DB2GSE.SPATIAL_INDEX
是什么东西,通过db2look 命令也是可以查到其定义:
CREATE INDEX EXTENSION DB2GSE.SPATIAL_INDEX( GS1 DOUBLE,GS2 DOUBLE,GS3 DOUBLE)
FROM SOURCE KEY(GEOMETRY DB2GSE.ST_GEOMETRY)
GENERATE KEY USING DB2GSE.GSEGRIDIDXKEYGEN(GEOMETRY..SRID,
GEOMETRY..XMIN,
GEOMETRY..XMAX,
GEOMETRY..YMIN,
GEOMETRY..YMAX,
GS1,GS2,GS3)
WITH TARGET KEY(SRSID INT, LVL INT,GX INT,GY INT,
XMIN DOUBLE,XMAX DOUBLE, YMAX DOUBLE,
YMAX DOUBLE)
SEARCH METHODS
WHEN CONTAINS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3)
FILTER USING DB2GSE.GSEGRIDIDXFILTER(1, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN WITHIN(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(2, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN EQUALS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(3, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN INTERSECTS(W DB2GSE.ST_GEOMETRY)
RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX, W..YMIN,W..YMAX,
GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN INTERSECTS2(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID, W..XMIN,W..XMAX,
W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING CASE WHEN W..SRID BETWEEN 2000000000
AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (W..YMIN > YMAX)
OR (W..YMAX < YMIN) OR (W..XMIN > XMAX) OR (W..XMAX < XMIN) THEN 0 ELSE
DB2GSE.GSEGRIDIDXFILTER(0, W..XMIN,W..XMAX,W..YMIN, W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) END
WHEN INTERSECTS3(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID,
W..XMIN,W..XMAX, W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING CASE WHEN W..SRID
BETWEEN 2000000000 AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTER(4, W..XMIN,W..XMAX,W..YMIN,
W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (W..YMIN > YMAX)
OR (W..YMAX < YMIN) OR (W..XMIN > XMAX) OR (W..XMAX < XMIN) THEN 0 ELSE
1 END
WHEN WINDOW(WXMN double,WYMN double,WXMX double,WYMX double,WSRID
int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID, WXMN,WXMX, WYMN,WYMX,
GS1,GS2,GS3) FILTER USING CASE WHEN WSRID BETWEEN 2000000000 AND 2000001000
THEN DB2GSE.GSEGRIDIDXFILTWIND(4, WSRID, WXMN,WXMX,WYMN,WYMX, XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) WHEN (WYMN > YMAX) OR (WYMX < YMIN) OR (WXMN > XMAX) OR (WXMX
< XMIN) THEN 0 ELSE DB2GSE.GSEGRIDIDXFILTER(0, WXMN,WXMX,WYMN, WYMX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY,
GS1,GS2,GS3) END
WHEN WINDOW2(WXMN double,WYMN double,WXMX double,WYMX
double,WSRID int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID, WXMN,WXMX,
WYMN,WYMX, GS1,GS2,GS3) FILTER USING CASE WHEN WSRID BETWEEN 2000000000
AND 2000001000 THEN DB2GSE.GSEGRIDIDXFILTWIND(4, WSRID, WXMN,WXMX,WYMN,WYMX,
XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3) WHEN (WYMN > YMAX) OR (WYMX
< YMIN) OR (WXMN > XMAX) OR (WXMX < XMIN) THEN 0 ELSE 1 END
WHEN IDXINTERSECTS(WXMN double,WYMN double,WXMX double,
WYMX double,WSRID int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPWIND(WSRID,
WXMN,WXMX, WYMN,WYMX, GS1,GS2,GS3) WHEN ALLROWS(P int) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGALL(GS1,GS2,GS3)
FILTER USING DB2GSE.GSEGRIDIDXFILALL( XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN OVERLAP(W DB2GSE.ST_GEOMETRY) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPROD(W..SRID,
W..XMIN,W..XMAX, W..YMIN,W..YMAX, GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTER(5,
W..XMIN,W..XMAX,W..YMIN, W..YMAX,XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3)
WHEN DISTANCE(C DB2GSE.ST_GEOMETRY,R DOUBLE) RANGE THROUGH DB2GSE.GSEGRIDIDXRNGPDIST(C..SRID,
C..XMIN,C..XMAX, C..YMIN,C..YMAX, R, GS1,GS2,GS3) FILTER USING DB2GSE.GSEGRIDIDXFILTDIST(
4, C..XMIN,C..XMAX,C..YMIN,C..YMAX, R, XMIN,XMAX,YMIN,YMAX,LVL,GX,GY, GS1,GS2,GS3);
从定义上可以看出,WHEN后面的这些method用到了索引。
文章来源:http://blog.csdn.net/liufeng1980423/article/details/6331464
0 个评论
相关问题
- 【抽奖结果已出】ArcGIS知乎社区活动 之 你不知道的地理空间革命【转发分享有奖】【附奖品寄送照片】
- 如何按空间位置顺序编号,并保持相邻图斑不跳号?
- Engine中如何判断两个要素类的空间参考是否是同一个?
- 市区择房分析时,需要添加字段并将其赋值1或者-1,怎么做? 在开始编辑的时候,总是出现空间参考与数据框不匹配提示,原因是什么?会影响下面的赋值吗?
- Arcgis for flex API是否支持读取arcsde的空间数据?
- 请问请问如何添加空间索引?
- 空间分析工具用不了
- 动态空间,TIF影像设置色阶
- 重复创建内存工作空间 ,系统内存上升很快,调用Marshal.ReleaseComObject释放AE对象 并没有起作用,请问如何正确的释放所有的AE对象?
- 空间统计分析求大神指导
- 桌面和server产品的高级版许可是否直接免费包含空间分析、3D分析、地统计分析这几个扩展模块