空间索引
1建立索引之前为空间层插入元数据
SQL> desc user_sdo_geom_metadata;
名称是否为空?类型
-----------------------------------------
-------- ----------------------------
TABLE_NAMENOT NULL VARCHAR2(32)
COLUMN_NAMENOT NULL
VARCHAR2(1024)
DIMINFOMDSYS.SDO_DIM_ARRAY
SRIDNUMBER
SQL> select *
from user_sdo_geom_metadata;
TABLE_NAMECOLUMN_NAMEDIMINFOSRID
---------- ------------------------------------ ----------
CUSTOMERSLOCATION8307
GC_ROAD_SEGMENT_USGEOMETRY8307
US_RESTAURANTSLOCATION8307
US_INTERSTATESGEOM8307
为对应于customer表的LOCATION列的空间层插入元数据
user_sdo_geom_metadata是个视图
INSERT
INTO user_sdo_geom_metadata
(table_name,
column_name, srid, diminfo)
VALUES
(
'CUSTOMERS', -- TABLE_NAME
'LOCATION', -- COLUMN_NAME
8307, -- SRID specifying a geodetic
coordinate system
SDO_DIM_ARRAY -- DIMINFO attribute for
storing dimension bounds, tolerance
(
SDO_DIM_ELEMENT
(
'LONGITUDE', -- DIMENSION NAME for first
dimension
-180, -- SDO_LB for the dimension: -180
degrees
180, -- SDO_UB for the dimension: 180
degrees
0.5 -- Tolerance of 0.5 meters (not 0.5
degrees: geodetic SRID)
),
SDO_DIM_ELEMENT
(
'LATITUDE', -- DIMENSION NAME for second
dimension
-90, -- SDO_LB for the dimension: -90
degrees
90, -- SDO_UB for the dimension: 90 degrees
0.5 -- Tolerance of 0.5 meters (not 0.5
degrees: geodetic SRID)
)
)
);
DIMINFO域为每个维定义了边界和容差(TOLERANE).它的值被设置为一个含有两个元素的SDO_DIM_ARRAY对象.
2创建空间索引
首先删除索引:
DROP
INDEX CUSTOMERS_SIDX;
其次创建索引:
CREATE
INDEX CUSTOMERS_SIDX ON CUSTOMERS(LOCATION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
3空间索引的参数信息
创建空间索引的语法:
CREATE INDEX ON()
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS ('parameter_string');
lTABLSPACE参数
通过这个参数,可以指定用哪个表空间来存储空间索引表。EG:tablesspace= TBS_3会将空间索引表存储在空间表空间TBS_3中CREATE INDEX customers_sidx ON customers(location)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS ('TABLESPACE=TBS_3');
lWORK_TABLSPACE参数
创建和删除大量不同大小的表会使表空间产生很多的空间碎片。为了避免这种情况,可以使用WORK_TABLSPACE参数来为这些工作表指定一个单独的表空间
CREATE
INDEX customers_sidx ON customers(location)
INDEXTYPE
IS MDSYS.SPATIAL_INDEX
PARAMETERS
('WORK_TABLESPACE= TBS_4');
lSDO_DML_BATCH_SIZE参数
在含有空间索引的表的插入和删除操作并未直接纳入该空间索引。相反,他们是在事务提交时被批量的纳入该索引中。这个参数用于指定一个事务中批量插入删除更新时的批量大小(对有大量插入的事务,该参数应该设置为50000或是10000)。
CREATE INDEX customers_sidx ON
customers(location)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS
('SDO_DML_BATCH_SIZE=5000');
4 USER_SDO_INDEX_METADATA视图
SQL> desc user_sdo_index_metadata;
名称是否为空?类型
-----------------------------------------
-------- -------------------
SDO_INDEX_OWNERVARCHAR2(32)
SDO_INDEX_TYPEVARCHAR2(32)
SDO_LEVELNUMBER
SDO_NUMTILESNUMBER
SDO_MAXLEVELNUMBER
SDO_COMMIT_INTERVALNUMBER
SDO_INDEX_TABLEVARCHAR2(32)
SDO_INDEX_NAMEVARCHAR2(32)
SDO_INDEX_PRIMARYNUMBER
SDO_TSNAMEVARCHAR2(32)
SDO_COLUMN_NAMEVARCHAR2(2048)
SDO_RTREE_HEIGHTNUMBER
SDO_RTREE_NUM_NODESNUMBER
SDO_RTREE_DIMENSIONALITYNUMBER
SDO_RTREE_FANOUTNUMBER
SDO_RTREE_ROOTVARCHAR2(32)
SDO_RTREE_SEQ_NAMEVARCHAR2(32)
SDO_FIXED_METARAW(255)
SDO_TABLESPACEVARCHAR2(32)
SDO_INITIAL_EXTENTVARCHAR2(32)
SDO_NEXT_EXTENTVARCHAR2(32)
SDO_PCTINCREASENUMBER
SDO_MIN_EXTENTSNUMBER
SDO_MAX_EXTENTSNUMBER
SDO_INDEX_DIMSNUMBER
SDO_LAYE