一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决

步骤思路:

1:查看sql是否走索引

2:查看索引是否失效

3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)

4:收集该表所有信息(包括索引)

5:分析该表所有信息(包括索引)

6:再次执行并查看

注意:哪个用户执行较慢,就用哪个用户进行操作,这样才准确

方法/步骤

1

查看sql是否走索引

以下是突然查询较慢的sql语句:

select * from  wwff

where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

耗时 9秒

注释:在JGSJ 字段上已经创建了索引,查看执行计划,发现表没有走索引,进行全表扫描

2

查看索引是否失效

select 'alter index '||a.owner||'.'||a.index_name||' rebuild nologging online;'

from dba_indexes a

where a.table_name='WWFF'

and a.status<>'VALID'

and a.partitioned<>'YES';  --因为该表不是分区表

3

hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)

select /*+index(wwff IDX$$_wwff_JGSJ)*/ * from  wwff

where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

耗时0.03秒

强制走索引之后,耗时才0.03秒,所以必须让该查询较慢的sql走上索引

4

收集该表所有信息(包括索引)

SQL> exec dbms_stats.gather_table_stats(ownname =>user ,tabname=>'WWFF' ,estimate_percent => 20,degree => 10,granularity => 'ALL',cascade => TRUE);

ownname =>user   user 表示当前用户

cascade => TRUE   true表示包括索引

5

分析该表所有信息(包括索引)

analyze table wfxx compute statistics;

6

再次执行并查看

select * from  wwff

where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

耗时:0.03秒

收集完统计信息并分析表之后,发现sql 开始走索引了

注意:只对表收集统计信息或者分析表信息,可能不会生效,必须两个都进行操作

== END

SQL查询速度慢的原因分析和解决方案

SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...

sql查询未走索引问题分析之查询数据量过大

前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

oracle sql查询转义下划线

1,看以下结果 select * from test where login like '%CF_%'; LOGIN------------------------------------------ ...

Oracle sql 查询结果某一列字段合并成为一条数据

使用oracle中自带函数  wmsys.wm_concat(需合并列的字段名) 用法如下: select code,name,wmsys.wm_concat(baname) from tab gro ...

oracle SQL查询中间若干条记录

方法一:利用rownum和差集函数minus select * from ( select * from emp order by sal) where rownum<13 minus sele ...

Oracle sql查询

oracle SQL查询number字段精度丢失之解决方法

解决办法: -- 3.3:表示原始数据 --fm9999999990.0000:表示保留到小数点后4位,若不存在则用0补位. ),'fm9999999990.0000') as demo from d ...

Oracle SQL执行缓慢的原因以及解决方案

以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中 ...

1 基础架构:一条sql查询语句如何执行?

1 基础架构:一条sql查询语句如何执行? 分析一个最简单的查询 mysql> select * from T where ID=10: MySQL基本架构示意图 大体来说,mysql可以分为s ...

随机推荐

使用vlc播放器播放rtsp流视频

可参考: 使用vlc播放器做rtsp服务器 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器播放rt ...

redis的使用

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

vijosP1543 极值问题

vijosP1543 极值问题 链接:https://vijos.org/p/1543 [题解](网上) 从简单情况人手:     设定m=1,将m代人方程②有(n2-n-1)2=1,可求出n=1: ...

htmlentities&lpar;&rpar; 函数

Definition and Usage定义和用法 The htmlentities() function converts characters to HTML entities.htmlentit ...

测试通过Word直接发布博文

这里是来自word 2013的一篇测试文章. 测试直接通过Word自带的bloger功能发布博客文章. 这里插入一张图片

linux内核笔记-内核同步

linux内核就相当于不断对请求进行响应的服务器,这些请求可能来自CPU,可能来自发出中断的外部设备.我们将内核看作两种请求的侍者. (1)老板提出请求,侍者如果空闲,为老板服务.(系统调用或异常) ...

Ubuntu上安装flashplayer

当你已经为linux flashplayer无法安装抓狂的时候,不妨来看看吧 我使用的是Ubuntu 12.04.4 LTS,由于firefox无法播放flash所以去下载了一个adobeflashp ...

TypeScript笔记 5--变量声明&lpar;解构和展开&rpar;

解构是什么 解构(destructuring assignment)是一种表达式,将数组或者对象中的数据赋给另一变量. 在开发过程中,我们经常遇到这样问题,需要将对象某个属性的值赋给其它两个变量.代码 ...

JUC同步锁(五)

根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁". 一.同步锁--synchronized关键字 通过synchroniz ...