空间索引不能用analyze进行分析

本文探讨了在Oracle数据库中空间索引与普通索引的不同分析方法。通过实例展示,当使用ANALYZE INDEX命令时,普通索引的last_analyzed时间会更新,但空间索引不会。文章提供了使用DBMS_STATS包来有效分析空间索引的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    一天,同事问,为何执行了索引分析后(ANALYZE INDEX index_name COMPUTE STATISTICS;),查看user_indexes视图中的last_analyze字段时间没有变化。自己试了下,发现普通索引是可以的,但是对于空间索引就不行。

    因此空间索引的分析不能采用analyze的方式,必须采用dbms_stats包的过程进行分析才有效果。
user_indexes该视图中的last_analyzed来源于sys.ind$中的analyzetime。
空间索引的分析:采用的空间索引为INDEX_I_EXCH_S_SPATIAL

1)查询索引最近一次分析的时间
select a.index_name,a.last_analyzed from user_indexes a where index_name='INDEX_I_EXCH_S_SPATIAL';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:10:11

2)执行ANALYZE分析
ANALYZE INDEX index_i_exch_s_spatial COMPUTE STATISTICS;

 3)再次查询最近一次分析时间

select a.index_name,a.last_analyzed from user_indexes a where index_name='INDEX_I_EXCH_S_SPATIAL';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:10:11

其索引分析时间没有改变,说明 ANALYZE INDEX 语句对空间索引不起作用。

4)执行如下分析后,分析时间发生改变:
BEGIN dbms_stats.gather_index_stats('ltwebgis','INDEX_I_EXCH_S_SPATIAL'); END;
select a.index_name,a.last_analyzed from user_indexes a where index_name='INDEX_I_EXCH_S_SPATIAL';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:15:33

一般索引的分析:采用的索引为IDX_I_EXCH_S_FID
1)查询索引最近一次分析的时间
select a.index_name,a.last_analyzed from user_indexes a where index_name='IDX_I_EXCH_S_FID';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:08:55

2)执行ANALYZE分析
ANALYZE INDEX idx_i_exch_s_fid COMPUTE STATISTICS;

 3)再查询最近分析时间

select a.index_name,a.last_analyzed from user_indexes a where index_name='IDX_I_EXCH_S_FID';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:19:14

其索引分析时间发生变化。

4)执行如下分析后,分析时间也发生改变
BEGIN dbms_stats.gather_index_stats('ltwebgis','IDX_I_EXCH_S_FID'); END;
select a.index_name,a.last_analyzed from user_indexes a where index_name='IDX_I_EXCH_S_FID';
INDEX_NAME                     LAST_ANALYZED
------------------------------ -----------------
INDEX_I_EXCH_S_SPATIAL         2011-8-11 13:19:53


查询最近一次重建的时间
select object_name,last_ddl_time from user_objects where object_type='INDEX' AND object_name='INDEX_I_EXCH_S_SPATIAL';
OBJECT_NAME                LAST_DDL_TIME
-----------------------   ----------------
INDEX_I_EXCH_S_SPATIAL     2011-8-1 16:26:11

对该索引重建后,last_ddl_time时间发生变化
ALTER INDEX INDEX_I_EXCH_S_SPATIAL REBUILD;
select object_name,last_ddl_time from user_objects where object_type='INDEX' AND object_name='INDEX_I_EXCH_S_SPATIAL';
OBJECT_NAME                LAST_DDL_TIME
-----------------------   ----------------
INDEX_I_EXCH_S_SPATIAL     2011-8-11 10:50:45


转载于:https://www.cnblogs.com/lanzi/archive/2011/08/12/2136727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值