免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1744 | 回复: 3
打印 上一主题 下一主题

在线等,请帮忙看看如何建索引 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 09:45 |只看该作者 |倒序浏览
oracle版本为9,bill_call_ticket按天分区,sql如下:
select
       account_month,
       partitionx day_id,
       USER_TYPE,
       BUSI_TYPE,
       ticket_type,
       PHS_own_ZONE_CODE ,
       phs_nbr,
       OUT_PARTNER_ID ,
/*下面为统计的数值*/
       count(*) sum_tickets,  

       sum(case when nvl(charge,0)=0 then 0 when busi_type not in ('10','20','30','60','12','13') then 0 else charge_counts end ) charge_counts,

       sum(case when nvl(fee_other,0)=0 then 0 when busi_type not in ('10','20','30','60','12','13') then 0 else fee_other_counts end) fee_other_counts,

       sum(nvl(charge,0)) charge,

       sum(nvl(fee_other,0)) fee_other,

       sum(fee_sum) fee_sum,
      
       sum(decode(BUSI_TYPE,'10',duration,'20',duration,'30',duration,'60',duration,'12',duration,'13',duration,0)) duration,

       roam_type,

       decode(user_type,'0',out_trunk_id,'0') out_trunk_id

from bill_call_ticket partition(b20070327)

where
              call_type='0'
      and (
              busi_type in ('10','50','54','55','AA','A1','A2','A3','51','52','53','58','56')
         or (user_type='1' and ticket_type='13')
         or (busi_type='30' and ticket_type in ('AA','AB'))
         or ticket_type='12'
             )
      group by account_month,
                     partitionx,
                     USER_TYPE,
                     BUSI_TYPE,
                     ticket_type,
                     PHS_own_ZONE_CODE ,
                     phs_nbr,
                     OUT_PARTNER_ID,
                     roam_type,
                     out_trunk_id


我试着对CALL_TYPE, ACCOUNT_MONTH, USER_TYPE, BUSI_TYPE, TICKET_TYPE这几个字段建了分区索引,可是我查看执行计划时却发现压根没用上,请问我该对哪些字段建分区索引还是全局索引?

论坛徽章:
0
2 [报告]
发表于 2007-04-12 10:06 |只看该作者
用hint 試試看﹐再不行
把optimizer_index_cost_adj調小點﹐

有group by 的東東﹐都很那個一。。。

论坛徽章:
0
3 [报告]
发表于 2007-04-12 10:17 |只看该作者
谢谢楼上的。我刚刚去重新执行了计划,发现用到了我之前用到的分区索引BILL_CALL_TICKET03 ,只是耗费时间最长的地方是group by,
下面是执行计划
SELECT STATEMENT, GOAL = CHOOSE        Cost=12        Cardinality=82 Bytes=13284
PARTITION LIST ALL                                       
  SORT GROUP BY                        Cost=12        Cardinality=82        Bytes=13284
   TABLE ACCESS BY LOCAL INDEX ROWID  
            Object owner=TEST Object name=BILL_CALL_TICKET         Cost=3 Cardinality=82 Bytes=13284
    INDEX RANGE SCAN       
            Object owner=TEST Object name=BILL_CALL_TICKET03 Cost=2 Cardinality=33
请问该如何优化

论坛徽章:
0
4 [报告]
发表于 2007-04-12 10:27 |只看该作者
LZ, 能夠把整個執行計划貼出來看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP