网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle 8i在GNU/Linux上的安装笔.
.甲骨文第二季度补丁修65个漏洞.
.spfile全攻略.
.Oracle分布式系统数据复制技术.
.在unix下定时执行oracle的sql方法.
.SQLServer和Oracle常用函数对比.
.如何实现数据库完整备份.
.Oracle 9i跳跃式索引扫描的小测试.
.在 RedHat 环境手工建立tunnel.
.oracle数据库开发的一些经验积累.
.关于数据库名(db_name)、实例名(.
.关于排序、sort_area_size、临时.
.怎样在Oracle 10g存储过程中log错.
.怎样知道自己的机器上有哪些服务.
.如何在Oracle/2000中调用Windows.
.学会看oracle SQL语法图.
.Redhat9下安装Oracle 9.2.
.[Oracle 10g] 表空间更名.
.动态SQL和PL/SQL的EXECUTE IMMED.
.Oracle的操作符优化技术初步.

Oracle查询指定索引提高查询效率

发表日期:2008-2-9


一个1600万数据表--短信上行表TBL_SMS_MO
结构:
CREATE TABLE TBL_SMS_MO
(
 SMS_ID NUMBER,
 MO_ID VARCHAR2(50),
 MOBILE VARCHAR2(11),
 SPNUMBER VARCHAR2(20),
 MESSAGE VARCHAR2(150),
 TRADE_CODE VARCHAR2(20),
 LINK_ID VARCHAR2(50),
 GATEWAY_ID NUMBER,
 GATEWAY_PORT NUMBER,
 MO_TIME DATE DEFAULT SYSDATE
);
CREATE INDEX IDX_MO_DATE ON TBL_SMS_MO (MO_TIME)
  PCTFREE 10
  INITRANS 2
  MAXTRANS 255
  STORAGE
  (
    INITIAL 1M
    NEXT 1M
    MINEXTENTS 1
    MAXEXTENTS UNLIMITED
    PCTINCREASE 0
  );
CREATE INDEX IDX_MO_MOBILE ON TBL_SMS_MO (MOBILE)
  PCTFREE 10
  INITRANS 2
  MAXTRANS 255
  STORAGE
  (
    INITIAL 64K
    NEXT 1M
    MINEXTENTS 1
    MAXEXTENTS UNLIMITED
    PCTINCREASE 0
  );   问题:从表中查询某时间段内某手机发送的短消息,如下SQL语句: SELECT MOBILE,MESSAGE,TRADE_CODE,MO_TIME
FROM TBL_SMS_MO
WHERE MOBILE='130XXXXXXXX'
AND MO_TIME BETWEEN TO_DATE('2006-04-01','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2006-04-07','YYYY-MM-DD HH24:MI:SS') ORDER BY MO_TIME DESC 返回结果大约需要10分钟,应用于网页查询,简直难以忍受。 分析: 在PL/SQL Developer,点击“EXPlain Plan”按钮(或F5键),对SQL进行分析,发现缺省使用的索引是IDX_MO_DATE。问题可能出在这里,因为相对于总数量1600万数据来说,都mobile的数据是很少的,假如使用IDX_MO_MOBILE比较轻易锁定数据。 如下优化: SELECT /*+ index(TBL_SMS_MO IDX_MO_MOBILE) */ MOBILE,MESSAGE,TRADE_CODE,MO_TIME
FROM TBL_SMS_MO
WHERE MOBILE='130XXXXXXXX'
AND MO_TIME BETWEEN TO_DATE('2006-04-01','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2006-04-07','YYYY-MM-DD HH24:MI:SS') ORDER BY MO_TIME DESC 测试: 按F8运行这个SQL,哇~... ... 2.360s,这就是差别。

上一篇:Oracle9i PL/SQL编程的经验小结 人气:820
下一篇:案例讨论:Oracle两表连接 人气:709
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐