数据库大数据量表SQL语句执行耗时久

起因:接口传输数据慢,出现超时情况。
原因:表数据量庞大,执行查询操作时耗时久。虽然建立了索引,但是没有效果,没有走索引。
数据库:Oracle

查看执行计划结果:Sql语句是否走索引。

EXPLAIN PLAN FOR slow sql; 
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

注:EXPLAIN PLAN FOR 后接Sql语句。

结果:全表扫描检索。长时间没做表分析或者重新收集表状态信息,未走索引。

在这里插入图片描述
解决:分析表。

analyze table tablename compute statistics

总结一:常见索引扫描类型

  1. index unique scan

 索引唯一扫描,当可以优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列,或者只是访问其中某行索引所在的数据的时候,优化器会选择这种扫描类型。
  1. index range scan

 索引范围扫描,当优化器发现在UNIQUE列上使用了大于、小于、大于等于、小于等于以及BETWEEN等就会使用范围扫描,在组合列上只使用部分进行查询,导致查询出多行数据。对非唯一的索引列上进行任何活动都会使用index range scan。
  1. index full scan

全索引扫描,如果要查询的数据可以全部从索引中获取,则使用全索引扫描。
  1. index fast full scan

索引快速扫描,扫描索引中的全部的数据块,与全索引扫描的方式基本上类似。两者之间的明显的区别是,索引快速扫描对查询的数据不进行排序,数据返回的时候不是排序的。“在这种存取方法中,可以使用多块读功能,也可以使用并行读入,从而得到最大的吞吐量和缩短执行时间”。

总结二:可能不走索引的情况

1、where 中字段没创建索引,不走索引。

2、长时间没做表分析或者重新收集表状态信息,不走索引。

3、索引列使用函数,需建立函数索引。

4、对索引列进行了加减乘除运算,不走索引。

5、where中使用 is null 和 is not null。

6、where中使用 like '%%' 进行模糊查询。

7、where中使用<>、not in 、not exist。

8、数据类型不匹配,例如:select * from tablewhere jlbh = 1;jlbh为varchar2类型字段

9、单独引用复合索引里非第一位置的索引列。

10、索引失效,可以考虑重建索引,rebuild online。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值