当前位置:  数据库>oracle

Oracle中存储过程和SQL语句的优化重点

    来源: 互联网  发布时间:2017-05-18

    本文导语: 1.全表扫描和索引扫描 大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。 Oracle中通过RowID访问数据是最快的方式 对字段进行函数转换,或者前模糊查询都会导致无法应用索引而进...

1.全表扫描和索引扫描
 大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。
 Oracle中通过RowID访问数据是最快的方式
 对字段进行函数转换,或者前模糊查询都会导致无法应用索引而进行全表扫描
 对Oracle共享池和缓冲区中的Sql必须要大小写都完全用上才能够匹配上
 
2.顺序问题
 Oracle按照从右到左的顺序对数据表进行解析。因此From最后面的表为基础表,一般要选择记录数最少的表作为基础表。
 对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。
 Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面
 
3.索引方面
 记录数少的表保留有主键索引就可以了,不要再去建其它索引,全表扫描也很快
 索引最好单独建立表空间,必要时候对索引进行重建
 必要时候可以使用函数索引,但不推荐使用
 Oracle中的视图也可以增加索引,但一般不推荐使用
 *Sql语句中大量使用函数时候会导致很多索引无法使用上,要针对具体问题分析
 
4.其它
 避免使用Select *,因为系统需要去帮你将*转换为所有的列名,这个需要额外去查询数据字典。
 Count(1)和Count(*)差别不大。
 多使用Decode函数来作简单的代码和名称间的转换,以减少表关联
 使用Truncate替代delete来删除记录,但Truncate数据不记录日志,无法进行回滚
 对于复杂的存储过程可以多次提交的数据的要多分多次Commit,否则长事务对系统性能影响很大
 Distinct和Having子句都是耗时操作,应该尽可能少使用
 在不需要考虑重复记录合并时候用Union All来代替Union
 使用显性游标而不使用隐性游标,特别是大数据量情况下隐性游标对性能影响很大
 是否使用函数的问题
 用直接的表关联来代替Exist.用Exist或Not Exists来代理In。In进行子查询效率很差。
 
5.SQL语句分析
 通过SQLPLUS中的SET TRACE 功能对Sql语句的性能进行分析
 通过Toad或PL/SQL Developer对语句的性能进行和索引的使用情况进行分析
 对Oracle缺省的优化不满意可以强制使用Hint,但一般不推荐使用
 对Flag等只存储是或否信息的字段,一般不推荐建立索引。必要可以采用位图索引
 *存在递归查询情况如果关联Table太多对性能会造成较大影响,往往推荐采用临时表转为分步骤操作提高性能
 *尽量使用表关联查询而不使用函数,但涉及类似于代码表要重复关联多次取数据问题时候又适合使用函数


    
 
 

您可能感兴趣的文章:

  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • oracle用什么SQL语句判断表存不存在
  • 请问怎么用jsp语句删除oracle中的一条记录?
  • Oracle中SQL语句连接字符串的符号使用介绍
  • Oracle用什么语句查询字段?
  • 怎么在java中向一个sql语句传参数,就像oracle的proc一样啊?
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • Oracle 9i轻松取得建表和索引的DDL语句
  • Oracle的SQL语句中如何处理‘&’符号
  • 关于Oracle中的sql语句的疑问,向大家请教。
  • Oracle Sql语句长度限制问题及解决
  • Oracle9i取得建表和索引的DDL语句
  • Oracle 中文字段进行排序的sql语句
  • oracle数据库添加或删除一列的sql语句
  • Oracle中查询本月星期5的所有日期列表的语句
  • Oracle中备份表的简单sql命令语句
  • oracle中误删除表后恢复语句(FLASHBACK)
  • Oracle判断指定列是否全部为数字的sql语句
  • jsp中在oracle中查询日期类型时sql语句该怎么写啊?
  • Oracle 常用的SQL语句
  • oracle分页存储过程 oracle存储过程实例
  • Oracle自动存储管理支持库 ASMLib
  • Oracle存储过程调试简述
  • oracle的存储过程实例讲解
  • Oracle存储过程如何返回一个结果集&如何获取
  • 关于SHELL调用oracle存储过程出现的一个小问题
  • Oracle利用存储过程造数据
  • oracle数据库中查看系统存储过程的方法
  • 求教:shell 脚本怎么获取ORACLE存储过程的返回值?
  • 帮我看一下程序,java调用oracle数据存储的问题?
  • 谁有oracle存储过程的原代码?谢谢!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • Oracle事务!使用游标提交过程
  • oracle sql执行过程(流程图)
  • oracle 10g在红旗桌面版6.2的安装过程
  • redhat 9 下安装 oracle9i 过程中,要求指定java目录,到底是哪一个目录?
  • Oracle建表过程初学
  • Oracle Enterprise Linux安装过程
  • Oracle创建用户权限的过程
  • Linux主机下配置Oracle 10G自动启动过程记
  • java调oracle过程的出了问题,求助!帮忙看看
  • 急!!!linux9下安装oracle9i在configuration Tool过程出现错误,在线等待,解决立即给分!
  • UNIX服务器上使用“kill"命令终止"Oracle”过程
  • Linux下Oracle数据库优化的具体过程
  • 剖析用UNIX的kill命令终止Oracle详细过程
  • 哪位大哥能介绍一下在redhat7.2下安装oracle9i的过程和细节问题,只要有用,小弟另有送分
  • JBUILDER如何执行ORACLE的储存过程
  • 用UNIX的kill命令来终止所有的Oracle过程
  • Oracle过程与函数的区别分析
  • Oracle中如何定时调用存储过程
  • Linux AS 4上升级Oracle 10.2.0.1.0到10.2.0.4.0的过程
  • sqlserver iis7站长之家
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,