网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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教程,数据库安全,数据库文摘
本月文章推荐
.Oracle9i初始化参数中文说明4.
.连接oracle10g免安装客户端解决办.
.Oracle9i New Features.
.参数文件的相关问题.
.如何使用Oracle中的 COALESCE 函.
.Oracle LogMiner终结版(zt).
.oracle中pro*c的学习.
.Oracle数据库常见问题答疑.
.oracle 10g flashback table.
.详细讲解大型数据库的设计原则与.
.Oracle9i初始化参数中文说明13.
.Linux Enterprise AS 4.0上安装O.
.Oracle中屏蔽英文提示信息方法二.
.嵌套表和可变数组.
.哪些因素可以影响Oracle数据库的.
.在Solaris下安装Oracle9i.
.oracle入门学习.
.比较SQL Server2005和Oracle 10g.
.PL/SQL DEVELOPER 基本用法详解.
.Oracle数据库系统使用经验六则.

优化,提高速度

发表日期:2008-2-9



  最近的一个项目,需要对几个超过千万的表进行计算,JION,复杂查询等操作,觉得SQL语句的优化非常重要,把一些心得写得出,希望同行们能纠正我的错误。
  
  ---与SQL优化(包括内存空间)有关一些INIT参数
  OPTIMIZER_MODE
  SORT_AREA
  SHARED_POOL_SZIE
  
  ---一些不使用索引的情况
  1,NOT IN
  2,NOT BETWEEN
  3,LIKE(第一个字符非%号除外,如name like '李%')
  4,<>
  5,IS NULL/IS NOT NULL
  6,查询的字段加函数
  7,在8I中,多字段的组合索引(A,B,C),select * from ** wher B='33',则索引也不会用。(按前缀式规则使用索引除外,如A='33' and B='33' A='33' A='33' and C='33')
  注:9I除外
  
  ---查询语句比较优化的写法:
  1,加HINT,改变其执行路径
  2,可能使用exsit的地方就尽量不用IN,可以使用not exiist的地方,尽量不要用not in
  3,两个表进行JION时,大表放在前面,JION字段建索引
  4,尽量用其它写法,取代NOT IN,如a,b表同结构,数据量很大,则代替select * from a where a.c not in (select c from b )
  的语句有
  a)select a.* from a, b where a.c = b.c + and b.c is null(据说速度比原写法提高30倍)
  b)select * from a minus select a.* from a,b where a.c=b.c (速度其次)
  c)select * from a where not exist(select a.* from a,b where a.c=b.c) (也不错)
  
  
  5,动态SQL中,尽量多用execute immediate,而少用DBMS_SQL,前者综合效率优于后者
  
  6,对于很复杂的查询语句,可以建立临时表进行缓冲(关于临时表的解释与使用,还希望同行告诉我在哪里有。。。)
  
  7,COUNT(*)与COUNT(某列)一样进行全表扫描Fast Full Index Scan,速度差不多
  
  8,经常同时存取多列,或经常使用GROUP BY的SQL语句,最好对表的GROUP字段建立组合索引。组合索引要尽量使要害查询形成索引覆盖,其前导列一定是使用最频繁的列。
  
  9,对于字段取值单一(如性别字段只有男与女),而经常在性别上做查询,则建立位图索引。
  注:BITMAP INDEX通常用于DSS,假如你的系统是OLTP,DML操作将LOCK整个BITMAP SEGMENT,因此只在DSS下 考虑BITMAP INDEX
上一篇:使用特殊索引的注意事项 人气:999
下一篇:Oracle9i实体化视图 人气:723
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐