Howto: 如何提高ArcSDE/Oracle多版本视图的查询效率
文章编号 : 24925
软件: Software: ArcSDE 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcEditor 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcInfo 8.0.1, 8.0.2, 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcView 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10
操作系统: N/A
软件: Software: ArcSDE 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcEditor 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcInfo 8.0.1, 8.0.2, 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10 ArcGIS - ArcView 8.1, 8.1.2, 8.2, 8.3, 9.0, 9.1, 9.2, 9.3, 9.3.1, 10
操作系统: N/A
1 个回复
易智瑞技术支持
赞同来自:
针对某个特定版本,是通过以下过程确定记录:
1. 确定当前版本的状态值。
2. 选择基表中所有的不属于D表中删除状态的记录。
3. 添加A表中所有的不属于D表中删除状态的记录。
D表中包括一个名字为D<sde.table_registry.registration_id>_PK主键。 ArcSDE /Oracle多版本视图的效率在很大程度上依赖于该主键是否正确。
如果主键索引创建的时候列的顺序不正确,Oracle会执行查询的时候会做很多的工作。正确的列顺序为:
DELETED_AT
SDE_DELETES_ROW_ID
SDE_STATE_ID
在早些版本的ArcSDE中,这个顺序是颠倒的。
内容: 检测该PK是否被正确的创建,可以执行以下的SQL语句。
. 如果具有DBA权限,执行:
SELECT index_owner, table_name
FROM dba_ind_columns
WHERE index_name LIKE 'D%_PK'
AND column_name = 'SDE_STATE_ID'
AND column_position = 1;
.如果用户为shema的拥有者并且没有DBA权限,执行:
SELECT table_name
FROM user_ind_columns
WHERE index_name LIKE 'D%_PK'
AND column_name = 'SDE_STATE_ID'
AND column_position = 1;
如果上述的SQL语句返回数据,返回来的表的主键必须被删除并重新按照正确的顺序创建。
1. 使原有的索引无效并删除它。
ALTER TABLE D<sde.table_registry.registration_id> DISABLE CONSTRAINT D<sde.table_registry.registration_id>_PK;
ALTER TABLE D<sde.table_registry.registration_id> DROP CONSTRAINT D<sde.table_registry.registration_id>_PK;
2. 按照以下的语法的重新创建索引:
ALTER TABLE D<sde.table_registry.registration_id> ADD CONSTRAINT D<sde.table_registry.registration_id>_PK PRIMARY KEY (deleted_at, sde_deletes_row_id, sde_state_id) USING INDEX PCTFREE 10 INITRANS 2 STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0) TABLESPACE <tablespace_name>;
存储参数的设置需要根据自己实际的需求设定,具体可以查看Oracle的官方文档。
这个变化适用于所有的Oracle的版本。
创建时间:2003-05-13
最近更新: 2011-09-30
【原文链接】
http://support.esrichina.com.c ... .html
要回复问题请先登录或注册