您的位置:首页 > 数据库 > Oracle

在使用 ST_Geometry 空间索引时优化 Oracle 查询性能和存储

2013-04-01 08:47 447 查看
原文地址:http://support.esri.com/en/knowledgebase/techarticles/detail/33341
Article ID:33341
Software:ArcSDE 9.2, 9.3, 9.3.1, 10, 10.1 ArcGIS for Desktop Advanced 10.1, 10.2 ArcGIS for Desktop Standard 10.1, 10.2 ArcGIS for Desktop Basic 10.1, 10.2
Platforms:N/A
概要说明
提供的说明描述如何使用 ST_Geometry,通过减少索引块的数量由每个空间的查询使用空间索引 (ST_Spatial_Index) 的读取时提高查询性能。减少为结构化查询语言 (SQL) 语句的逻辑或物理 I/O 操作提高了查询速度,并提高了服务器,提供进一步的可扩展性上的资源。

步骤过程
ALTER TABLE <table_name> 收缩(SHRINK)空间紧凑级联的 Oracle 命令可以减少存储通过压缩尽可能少块中的数据的表或索引所需的块的数目。该命令需要的收缩的部分驻留使用自动段管理的表空间中。

若要缩小空间索引,请执行以下步骤:

1:查看域索引表,获得空间索引的名称。

下面的示例演示如何获取一个名为 'Parcels' 表的空间索引标识符以及如何执行 ALTER TABLE 命令以收缩空间索引。作为表的所有者,应执行步骤。
SQL> SELECT 'S'||index_id||'_IDX$' AS DOMAIN_INDEX FROM sde.st_geometry_index  WHERE owner = USER  AND table_name = 'PARCELS';

DOMAIN_INDEX

------------

S15_IDX$

SQL> ALTER TABLE s15_idx$ SHRINK SPACE COMPACT CASCADE;

Table altered.

关于索引表已经索引对象参考:/article/1358792.html
2:检查索引 leaf_blocks 存在之前和之后执行的收缩命令的数目。这将有助于验证使用收缩命令的好处。

例如:

执行收缩之前:
SQL> SELECT index_name, leaf_blocks FROM user_indexes WHERE table_name = 'S15_IDX$';

INDEX_NAME           LEAF_BLOCKS

-------------------- -----------

S15$_IX2                   18427

S15$_IX1                   27465


执行收缩之后
SQL> SELECT index_name, leaf_blocks FROM user_indexes WHERE table_name = 'S15_IDX$';

INDEX_NAME           LEAF_BLOCKS

-------------------- -----------

S15$_IX1                   13973

S15$_IX2                   17406


3:执行索引对象收缩之后,更新表的统计信息
SQL> exec dbms_stats.gather_table_stats(user,'parcels');


-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: