查看: 4718|回复: 17

[性能调整] 简单的语句怎么去优化????大侠帮帮忙。

[复制链接]
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
发表于 2010-7-20 14:58 | 显示全部楼层 |阅读模式
1)SQL:(执行次数很高)

Select Distinct Proj_Code, TesterType From teapp.RTMatchTable where TesterType='QST'
返回行数: 257

2)执行计划:

SQL> set autotrace traceonly
SQL> Select Distinct Proj_Code, TesterType From teapp.RTMatchTable where TesterType='QST';

275 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1711074783

--------------------------------------------------------------------------------
-----------

| Id  | Operation             | Name              | Rows  | Bytes | Cost (%CPU)|
Time     |

--------------------------------------------------------------------------------
-----------

|   0 | SELECT STATEMENT      |                   |   421 |  6315 |    47   (5)|
00:00:01 |

|   1 |  HASH UNIQUE          |                   |   421 |  6315 |    47   (5)|
00:00:01 |

|*  2 |   INDEX FAST FULL SCAN| IDX_RTMATCHTABLE1 | 12920 |   189K|    45   (0)|
00:00:01 |

--------------------------------------------------------------------------------
-----------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("TESTERTYPE"='QST')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        186  consistent gets
          0  physical reads
          0  redo size
       7237  bytes sent via SQL*Net to client
        722  bytes received via SQL*Net from client
         20  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        275  rows processed
-----------------------------------------------------------------------------------------------------------------------------------------------------
3)相关记录数:
Select count(*) From teapp.RTMatchTable where TesterType='QST'

返回行数:12642

Select count(*) From teapp.RTMatchTable

返回行数:45233

4)曾经尝试创建bitmap index,但没有任何性能改变。
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-7-20 15:42 | 显示全部楼层
表的总行数 45233,查询返回257行不到总行树的10%,而且使用INDEX FAST FULL SCAN扫描方式。逻辑读也不高。目前来说性能还是比较理想的。

使用道具 举报

回复
论坛徽章:
33
ITPUB元老
日期:2009-03-11 15:35:03咸鸭蛋
日期:2011-11-06 22:20:25紫蛋头
日期:2011-12-27 22:15:052012新春纪念徽章
日期:2012-01-04 11:49:542014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11红宝石
日期:2014-06-03 13:13:19
发表于 2010-7-20 15:43 | 显示全部楼层
create index index_name on teapp.RTMatchTable(TesterType,Proj_Code)

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-7-20 15:48 | 显示全部楼层

回复 #2 aks5201314 的帖子

一天执行8,401次,目前对系统影响不大.想尽量减少consistent gets.Thanks

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-7-20 15:50 | 显示全部楼层

回复 #3 battleman 的帖子

索引已存在:

create index TEAPP.IDX_RTMATCHTABLE1 on TEAPP.RTMATCHTABLE (TESTERTYPE, PROJ_CODE)
  tablespace TBS_SMALL
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-7-20 15:56 | 显示全部楼层
回复楼主,如果还想减少逻辑读。那只有尝试一下索引跳跃扫描了。不过要让优化器选择索引跳跃扫描,可能要在SQL语句中加提示。能把你建立索引的语句帖出来看一下吗?

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-7-20 16:01 | 显示全部楼层

回复 #6 aks5201314 的帖子

目前只有一个PK,和一个组合索引:


alter table TEAPP.RTMATCHTABLE
  add constraint PK_ID primary key (ID)
  using index
  tablespace TBS_SMALL
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate indexes
create index TEAPP.IDX_RTMATCHTABLE1 on TEAPP.RTMATCHTABLE (TESTERTYPE, PROJ_CODE)
  tablespace TBS_SMALL
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-7-20 16:03 | 显示全部楼层
Select /*+ INDEX(RTMatchTable IDX_RTMATCHTABLE1) */ Distinct Proj_Code, TesterType From teapp.RTMatchTable where TesterType='QST' 看一下执行计划有没有变化

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-7-20 16:19 | 显示全部楼层

回复 #8 aks5201314 的帖子

不错,高人啊!!

从186降为59

SQL> set autotrace traceonly
SQL> Select /*+ INDEX(RTMatchTable IDX_RTMATCHTABLE1) */ Distinct Proj_Code, TesterType From teapp.RTMatchTable where TesterType='QST' ;

275 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3011949455

--------------------------------------------------------------------------------
--------

| Id  | Operation          | Name              | Rows  | Bytes | Cost (%CPU)| Ti
me     |

--------------------------------------------------------------------------------
--------

|   0 | SELECT STATEMENT   |                   |   421 |  6315 |    48   (3)| 00
:00:01 |

|   1 |  SORT UNIQUE NOSORT|                   |   421 |  6315 |    48   (3)| 00
:00:01 |

|*  2 |   INDEX RANGE SCAN | IDX_RTMATCHTABLE1 | 12920 |   189K|    47   (0)| 00
:00:01 |

--------------------------------------------------------------------------------
--------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("TESTERTYPE"='QST')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
         59  consistent gets
          0  physical reads
          0  redo size
       7237  bytes sent via SQL*Net to client
        722  bytes received via SQL*Net from client
         20  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        275  rows processed

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2010-7-20 16:35 | 显示全部楼层
楼主把索引创建语句修改成这样
create index TEAPP.IDX_RTMATCHTABLE1 on TEAPP.RTMATCHTABLE (PROJ_CODE,TESTERTYPE)
  tablespace TBS_SMALL
然后再执行语句试试,看执行计划是否能走索引跳跃扫描

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表