Oracle优化[通俗易懂]

个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化,物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化物理优化的一些原则:1).Oracle的运行环境(网络,硬件等)2).使用合适的优化器3).合理配置oracle实例参数4).建…

大家好,又见面了,我是你们的朋友全栈君。

个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化 
物理优化的一些原则: 
1). Oracle的运行环境(网络,硬件等) 
2). 使用合适的优化器 
3). 合理配置oracle实例参数 
4). 建立合适的索引(减少IO) 
5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突) 
6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO) 
   逻辑上优化: 
1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用 
2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中 
如: select * from Emp where name=?  这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好 
3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能 
4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时 
5). 选择有效的表名 
对于多表连接查询,可能oracle的优化器并不会优化到这个程度, oracle 中多表查询是根据FROM字句从右到左的数据进行的,那么最好右边的表(也就是基础表)选择数据较少的表,这样排序更快速,如果有link表(多对多中间表),那么将link表放最右边作为基础表,在默认情况下oracle会自动优化,但是如果配置了优化器的情况下,可能不会自动优化,所以平时最好能按照这个方式编写sql 
6). Where字句 规则 
Oracle 中Where字句时从右往左处理的,表之间的连接写在其他条件之前,能过滤掉非常多的数据的条件,放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引 
7). 使用Exits Not Exits 替代 In  Not in 
8). 合理使用事务,合理设置事务隔离性 
数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数

 

8. Oracle分区是怎样优化数据库的? 
Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。 
1).  增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用; 
2).  减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少; 
3).  维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多; 
4).  均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能; 
5).  改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快 
6).  分区对用户透明,最终用户感觉不到分区的存在。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125685.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 淘宝网店装修代码使用方法大全图_淘宝店铺装修代码用什么软件做的

    淘宝网店装修代码使用方法大全图_淘宝店铺装修代码用什么软件做的公告栏大小:宽不要超过480像素,高可以随意代码:店铺公告地址”/>要求:图片一定要通过网上空间或相册放置:管理我的店铺——基本设置——公告可以预览看一下悬挂饰物代码::你图片的地址”style=”left:20px;position:relative;top:0px”/>要求:不能是自己电脑上的图片,要在网上的图片地址才行放置:管理我的店铺—

    2025年6月25日
    3
  • linux定时器编程实验报告,Linux定时器实验.doc[通俗易懂]

    linux定时器编程实验报告,Linux定时器实验.doc[通俗易懂]Linux定时器实验Linux第六次实验及分析报告实验要求:1)在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应(方法不限)2)分析你的程序的实际执行借助了内核的哪些机制3)提交实验与分析报告一:在用户态编写一个程序,该程序设定一个定时器,在时间到期的时候做出某种可观察的响应(方法不限)G++进行编译运行结果如下:可见调用间隔定时器定时10秒成功!二:分析你的程序的…

    2022年7月26日
    8
  • window10编译器_windows shell编程

    window10编译器_windows shell编程原文地址http://www.cctry.com/forum.php?mod=viewthread&tid=250698&extra=page%3D1&page=1&如何让我们的c++程序可以支持脚本,尤其是支持JavaScript是件很有意思的事情的,那样可以为软件的灵活性,扩展性提供可能。你可能会说用JavaScript引擎,对,JavaScript引擎有很多,有Googlev8,s

    2022年10月10日
    3
  • jQuery 教程

    jQuery 教程菜鸟教程—jQuery教程:https://www.runoob.com/jquery/jquery-tutorial.htmljQuery是一个JavaScript库。jQuery极大地简化了JavaScript编程。jQuery简介什么是jQuery?jQuery是一个JavaScript函数库。jQuery是一个轻量级的”写的少,做的多”的JavaScript库。jQuery库包含以下功能:HTML…

    2022年5月29日
    34
  • 博客目录与概览

    从即日起,我将开始开始着手写作《深入理解机器学习》分类下的文章。《深入理解机器学习》不仅仅把目光局限机器学习算法的推导与实现,更多的会将目光聚焦于从数学、统计学以及统计学习的角度来深入理解机器学习算法,除此之外,我还会讨论各个机器学习算法局限与瓶颈,纵横向比较各种机器学习算法的优劣等。在详细介绍机器学习算法的同时,我还会通过Python和Scala给出相关项目的实战代码。所以,想深入学习机器学习的…

    2022年4月6日
    41
  • java线程池 面试题(精简)

    java线程池 面试题(精简)什么是线程池?线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。 为什么要使用线程池?创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。这样频繁的创建线程和销毁线程,再…

    2022年6月13日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号