[ Oracle索引失效问题 ] :A表 create table as B表,再从B表把数据还原回来A表,A表中索引失效问题

问题描述:

A表 create table as B表
其中A表有索引,B表没有索引(因为create table只建表和传数据,约束和索引不连同创建)

现在将B表数据再insert into 回来A表(A表清空状态下)

此时A、B两张表数据一致,A表有索引,B表没索引,但是发现B表关联查询很快,A表关联查询很慢,怀疑没有走索引

尝试解决

1. 第一次尝试

重建A表中所有索引
alter index XXX rebuild;

2. 第二次尝试并成功:

因为第一次create table as B 把有索引的数据带过去了,所以B表查询很快,但是将B表insert回来时,由于B表没有索引,所以insert 回来的表数据中不带索引,必须得更新统计信息,才能将索引挂到数据上面,即使重建索引也不会生效

  1. 解锁用户
call DBMS_STATS.UNLOCK_schema_STATS('user_name');
  1. 更新统计信息
ANALYZE TABLE table_name COMPUTE STATISTICS; --分析表

ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXED COLUMNS; --分析索引列

ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXES FOR ALL INDEXED COLUMNS; --分析索引和索引列
  1. 锁表
CALL DBMS_STATS.LOCK_TABLE_STATS('user_name','table_name');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值