Oracle索引明明没问题,但是查询很慢的一种特殊情况

目录

1.前言

2.一条老sql突然查询慢了

3.修复

4.原因分析

附:并行度的查询sql

 


1.前言

一般而言,数据库查询慢首先是查看sql写法有无问题,然后分析查询的时候是否充分运用到索引。常规的sql优化也就是这样一个大体的流程;

但是,有意外情况,就是一条老的sql,一直用的没问题,偶然出现了查询慢的情况,曾在Oracle数据库上遇到过这个问题,以下对这次情况做一个回顾。

2.一条老sql突然查询慢了

首先sql写法没变;

其次,检查索引列是正常;

咨询了数据库的操作,是在环境数据同步后发生的,由于数据同步涉及了大量的并行查询,可能与这有关。

3.修复

a. 查询并行度:

select degree from dba_indexes where index_name='index_name';

查询的值DEGREE较高。

b. 关闭并行查询

sql> alter index index_name(索引名称) noparallel;

之后查询并行度,degree的值为1;

老的sql查询也变快了,数据库性能恢复。

4.原因分析

建索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了。访问有并行度的索引时,可能会出现并行执行,这可能会引发一些问题,如在服务器资源紧张的时候用并行会引起更加严重的争用。当使用并行后,需要把并行度改回来。分区建立后发现查询SQL未走索引,发现索引失效,需要重建;由于表太大重建索引时给索引加上了并行(深度degree),但是未在结束后加上noparallel。

附:并行度的查询sql

SQL> select degree from dba_indexes where index_name='index_name';

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值