CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

大虾看看我的表应该怎么建立索引!谢谢!

楼主LightSun1003(东大农民工)2005-12-01 11:44:47 在 Oracle / 开发 提问

两个百万级数据的表  
  表一  
   
  DROP   TABLE   CNGP_MT_LOG   CASCADE   CONSTRAINTS   ;    
   
  CREATE   TABLE   CNGP_MT_LOG   (    
      MTSEQ                   NUMBER   (10),    
      MSGTYPE               NUMBER   (2),    
      NEEDREPORT         NUMBER   (2),    
      PRIORITY             NUMBER   (2),    
      SERVICEID           VARCHAR2   (10),    
      FEETYPE               VARCHAR2   (2),    
      FEEUSERTYPE       VARCHAR2   (2),    
      FEECODE               VARCHAR2   (6),    
      MSGFORMAT           NUMBER   (2),    
      SRCTERMID           VARCHAR2   (21),    
      CHARGETERMID     VARCHAR2   (21),    
      DESTTERMID         VARCHAR2   (21),    
      MSGCONTENT         VARCHAR2   (254),    
      SENDDATE             DATE                     DEFAULT   sysdate,    
      MSGID                   VARCHAR2   (20),    
      STATUS                 VARCHAR2   (10))  
        TABLESPACE   USERS  
        PCTFREE   10  
        INITRANS   1  
        MAXTRANS   255  
      STORAGE   (    
        INITIAL   65536  
        MINEXTENTS   1  
        MAXEXTENTS   2147483645  
    )  
        NOCACHE;    
   
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX01   ON    
      "JSCNGP".CNGP_MT_LOG(MTSEQ)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX02   ON    
      "JSCNGP".CNGP_MT_LOG(SERVICEID)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX03   ON    
      "JSCNGP".CNGP_MT_LOG(FEETYPE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX04   ON    
      "JSCNGP".CNGP_MT_LOG(FEECODE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX05   ON    
      "JSCNGP".CNGP_MT_LOG(SRCTERMID)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX06   ON    
      "JSCNGP".CNGP_MT_LOG(DESTTERMID)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_MT_LOG_INDEX07   ON    
      "JSCNGP".CNGP_MT_LOG(SENDDATE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
   
  表二  
  DROP   TABLE   CNGP_REPORT   CASCADE   CONSTRAINTS   ;    
   
  CREATE   TABLE   CNGP_REPORT   (    
      ID                       VARCHAR2   (30),    
      MOBILE               VARCHAR2   (21),    
      SPCODE               VARCHAR2   (21),    
      SUB                     VARCHAR2   (10),    
      DLVRD                 VARCHAR2   (10),    
      SUBMIT_DATE     VARCHAR2   (20),    
      DONE_DATE         VARCHAR2   (20),    
      STAT                   VARCHAR2   (20),    
      ERR                     VARCHAR2   (10),    
      TXT                     VARCHAR2   (50),    
      RECDATE             DATE)  
        TABLESPACE   USERS  
        PCTFREE   10  
        INITRANS   1  
        MAXTRANS   255  
      STORAGE   (    
        INITIAL   65536  
        MINEXTENTS   1  
        MAXEXTENTS   2147483645  
    )  
        NOCACHE;    
   
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX01   ON    
      "JSCNGP".CNGP_REPORT(MOBILE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX02   ON    
      "JSCNGP".CNGP_REPORT(SPCODE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX03   ON    
      "JSCNGP".CNGP_REPORT(SUBMIT_DATE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX04   ON    
      "JSCNGP".CNGP_REPORT(DONE_DATE)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX05   ON    
      "JSCNGP".CNGP_REPORT(STAT)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
  CREATE   INDEX   JSCNGP.CNGP_REPORT_INDEX06   ON    
      "JSCNGP".CNGP_REPORT(ERR)    
      TABLESPACE   USERS   PCTFREE   10     STORAGE(INITIAL   65536   )    
  ;    
   
   
  我建了这么多索引,好像太多了,请大虾帮忙看看,怎么优化好  
  这个表经常做INSERT操作。  
  执行的比较多的查询SQL语句是  
  select   count(*)   from   CNGP_MT_LOG   where   STATUS=0   and   to_char(SENDDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
   
  select   count(*)   from   SMS_MO_LOG   where   to_char(RECDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
   
  select   count(*)   from   CNGP_REPORT   where   to_char(RECDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
   
  select   count(*)   from   CNGP_REPORT   where   trim(ERR)='000'   and   to_char(RECDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
   
  select   a.FEECODE   as   FEECODE   from   CNGP_MT_LOG   a,CNGP_REPORT   b   where   a.MSGID=b.ID   and   trim(b.ERR)='000'   and   to_char(a.SENDDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
   
   
  我对索引了解得很少,请大家指点一下,怎么优化表、索引、sql语句。  
  欢迎拍砖! 问题点数:50、回复次数:7Top

1 楼bzszp(SongZip)回复于 2005-12-01 12:31:53 得分 0

CNGP_MT_LOG   :SENDDATE,STATUS,SENDDATE  
  CNGP_REPORT:RECDATE,函数索引trim(ERR)  
   
  基本上就可以了。  
  Top

2 楼LightSun1003(东大农民工)回复于 2005-12-01 12:42:21 得分 0

函数索引能具体写出来吗?  
  其他的索引是不是都是每一列对应一个?这样在执行sql语句的时候同时用到几个索引能达到优化的目的吗?  
  sql语句不用改?Top

3 楼bzszp(SongZip)回复于 2005-12-01 12:47:33 得分 0

create   index   idx_name   on   cngp_report(trim(err));  
  对上面的五个字段分别建立索引即可,sql语句不用改。Top

4 楼LightSun1003(东大农民工)回复于 2005-12-01 12:56:59 得分 0

如果我sql语句中不用trim(),是不是就直接建立err的索引就可以了?Top

5 楼kangji(尾鱼头)回复于 2005-12-02 13:16:44 得分 0

嗯Top

6 楼photolyh()回复于 2005-12-03 16:16:30 得分 0

在建索引的同时,把  
  select   count(*)   from   CNGP_MT_LOG   where   STATUS=0   and   to_char(SENDDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
  这条语句改成  
  select   count(*)   from   CNGP_MT_LOG   where   STATUS=0   and   SENDDATE   between   to_date(输入日期1,'yyyy-mm-dd')   and   to_date(输入日期2,'yyyy-mm-dd');  
   
  Top

7 楼tangtangno1(糖糖)回复于 2005-12-17 13:38:34 得分 0

CNGP_MT_LOG(SENDDATE,STATUS)  
  SMS_MO_LOG(RECDATE)  
  CNGP_REPORT(RECDATE,ERR)  
  //检查一遍CNGP_REPORT(ERR)的输入,在输入的时候就不要出现“   ERR   ”的情况,这样才能更好的用索引  
  CNGP_REPORT(ID,ERR)  
  //只需要建立上边的索引就行,修改完索引以后就上楼上说的那样把那些查询sql都改一边:  
   
  在建索引的同时,把  
  select   count(*)   from   CNGP_MT_LOG   where   STATUS=0   and   to_char(SENDDATE,'yyyymmdd')   between   to_date(输入日期1)   and   to_date(输入日期2);  
  这条语句改成  
  select   count(*)   from   CNGP_MT_LOG   where   STATUS=0   and   SENDDATE   between   to_date(输入日期1,'yyyy-mm-dd')   and   to_date(输入日期2,'yyyy-mm-dd');  
  Top

相关问题

  • 关于建立索引的问题:“标题”字段是否应该建立索引??
  • 请问ACCESS数据库有索引吗?如何建立索引?如何查看一个数据表的索引?
  • 如何对已经存在的DBF表建立索引?用TTable
  • 在一个表上建立了两个索引的情况????
  • 在sqlserver7下怎样在一个表中建立索引
  • 如何建立表与索引,查询更快
  • 如何在Table组件中给数据表建立索引?
  • 大家帮我看看这样的SQL语句,应该如何建立索引?
  • 如何得到索引建立的时间信息?如何查询出某表的全部索引名称?
  • 触发器中可不可以为inserted表 和 deleted 表建立索引 ?

关键词

  • 语句
  • date
  • report
  • storage
  • cngp
  • senddate
  • 索引
  • 输入日期
  • jscngp
  • mt

得分解答快速导航

  • 帖主:LightSun1003

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo