最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

复合索引与函数索引优化一例

[复制链接]
跳转到指定楼层
楼主
发表于 2014-8-25 20:10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

复合索引与函数索引优化一例


导语:业务上有很多应用需求都是date类型转换成char类型进行比较求值。这样的应用,使用索引往往就要应用函数索引,本文讲一例函数索引的应用。

SELECT
MAX(tt.workitem_id) workitem_id,
tt.task_id
FROM
doudou tt
WHERE
tt.position_id=5
AND TO_CHAR(tt.pos_rcv_datim, 'yyyymmdd')='20140815'
GROUP BY
tt.task_id;

670 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 3539805324
-----------------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |        |  1862 | 91238 |  4570   (1)| 00:00:55 |
|   1 |  HASH GROUP BY     |        |  1862 | 91238 |  4570   (1)| 00:00:55 |
|*  2 |   TABLE ACCESS FULL| DOUDOU |  1864 | 91336 |  4569   (1)| 00:00:55 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - filter("TT"."POSITION_ID"=5 AND
              TO_CHAR(INTERNAL_FUNCTION("TT"."POS_RCV_DATIM"),'yyyymmdd')='20140815')

Statistics
----------------------------------------------------------
         93  recursive calls
          0  db block gets
      16855  consistent gets
      16637  physical reads
          0  redo size
      35014  bytes sent via SQL*Net to client
       1007  bytes received via SQL*Net from client
         46  SQL*Net roundtrips to/from client
         47  sorts (memory)
          0  sorts (disk)
        670  rows processed

IMAGING@doudou1> create index idx_doudou on doudou(TO_CHAR(pos_rcv_datim, 'yyyymmdd'),POSITION_ID) online nologging;
Index created.

IMAGING@doudou1>
SELECT
MAX(tt.workitem_id) workitem_id,
IMAGING@doudou1>   2    3  tt.task_id
  4  FROM
  5  doudou tt
  6  WHERE
  7  tt.position_id=5
  8  AND TO_CHAR(tt.pos_rcv_datim, 'yyyymmdd')='20140815'
  9  GROUP BY
10  tt.task_id;
670 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 3748972397
-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |  1862 | 87514 |   167   (1)| 00:00:03 |
|   1 |  HASH GROUP BY               |            |  1862 | 87514 |   167   (1)| 00:00:03 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DOUDOU     |  1864 | 87608 |   166   (0)| 00:00:02 |
|*  3 |    INDEX RANGE SCAN          | IDX_DOUDOU |   746 |       |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access(TO_CHAR(INTERNAL_FUNCTION("POS_RCV_DATIM"),'yyyymmdd')='20140815'
              AND "TT"."POSITION_ID"=5)

Statistics
----------------------------------------------------------
         25  recursive calls
          0  db block gets
        191  consistent gets
          5  physical reads
          0  redo size
      35014  bytes sent via SQL*Net to client
       1007  bytes received via SQL*Net from client
         46  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        670  rows processed
670 rows selected.

总结:
1.业务需求中这种类型的转换,开发应和DBA多多进行交流,往往就是一个小问题引起系统的崩溃。尽量减少类型转换。
2.复合索引与函数索引这种结合也是可以考虑的。自己暗喜一下。

附表:
收集多列统计信息
begin
dbms_stats.gather_table_stats (
ownname         => 'DOUDOU',
tabname         => 'DOUDOU',
estimate_percent=> 100,
method_opt  => 'FOR ALL COLUMNS SIZE SKEWONLY FOR COLUMNS  (pos_rcv_datim,POSITION_ID)',
cascade         => TRUE
);
end;
/
来自群组: Oracle DBA交流
楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-29 12:32

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表