首页 理论教育 空间数据库实验教程:创建与删除空间索引

空间数据库实验教程:创建与删除空间索引

时间:2023-08-29 理论教育 版权反馈
【摘要】:和B树索引一样,Oracle中的空间索引也是用SQL语句创建。如果要为test建立空间索引,则首先需要为它插入元数据:然后,才能成功执行空间索引创建语句:如果要重建test_loc_sind空间索引,可以先采用SQL>drop index test_loc_sind;删除已经存在的索引,然后再进行创建。需要说明的是,test_loc_sind空间索引虽然被删除了,但是之前插入的元数据却依然存在,所以在重建该字段的索引时,不需要重新插入元数据。

空间数据库实验教程:创建与删除空间索引

在关系数据库中,最常用的索引为B树索引,其使用方法在数据库原理或数据库系统概论的课程中都学过了。和B树索引一样,Oracle中的空间索引也是用SQL语句创建。例如,在MVDEMO方案的CUSTOMERS表中的LOCATION列上创建一个空间索引,程序代码如下:

上面的语句与B树索引的创建语句类似,除了后面的indextype字句后面指定的索引类型为mdsys.spatial_index外。

针对一个表指定的SDO_GEOMETRY字段,只能创建一个空间索引。如果该空间索引已经存在,运行上面的语句会报如下错误

在行:1上开始执行命令时出错-

CREATE INDEX customers_location_sindex ON customers(location)INDEXTYPE IS

MDSYS.SPATIAL_INDEX

错误报告-

SQL错误:ORA-29879:使用同一个索引类型无法在列表上创建多个域索引

29879.00000- "cannot create multiple domain indexes on a column list using same indextype"

*Cause:An attempt was made to define multiple domain indexes on the same column list using identical indextypes.

*Action:Check to see if a different indextype can be used or if the index can be defined on another column list.

通过下列代码可以查询到在CUSTOMERS(LOCATION)上已经存在的索引名称和对应的索引数据表:(www.xing528.com)

SQL>select sdo_index_table,index_name from user_sdo_index_info

where table_name='customers'and column_name='location';

返回如下结果:

也就是说,在CUSTOMERS(LOCATION)上已经存在一个名为SIDX_CUSTOMERS_LOC的索引。这个索引也可以在Oracle SQL Developer中点击查看,如图5-5所示。

图5-5 空间索引的元数据信息

也可以采用如下语句查看USER_SDO_GEOM_METADATA视图中的元数据信息:

上面是对已经存在的空间索引元数据进行的分析。如果要对一个从来没有创建过空间索引的表建立空间索引,则首先需要插入相应的空间层元数据。为此,复制CUSTOMERS表到一个新表test中。如果要为test(location)建立空间索引,则首先需要为它插入元数据:

然后,才能成功执行空间索引创建语句:

如果要重建test_loc_sind空间索引,可以先采用

SQL>drop index test_loc_sind;

删除已经存在的索引,然后再进行创建。需要说明的是,test_loc_sind空间索引虽然被删除了,但是之前插入的元数据却依然存在,所以在重建该字段的索引时,不需要重新插入元数据。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈