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).  分区对用户透明,最终用户感觉不到分区的存在。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关于google的历史纪录和书签

    关于google的历史纪录和书签

  • 单片机常用滤波算法

    单片机常用滤波算法单片机常用滤波算法 说明:假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时进行判断,如果本次值与上次值之差<=A,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。B、优点:能有效克服因…

  • VS2013下串口数据char型转COleVariant问题[通俗易懂]

    VS2013下串口数据char型转COleVariant问题[通俗易懂]在串口需要发送一串字符数组buf[]时,COleVariant(buf)强制转换失效(在vc6.0环境中是允许的)。在VS2013环境下需要借助CByteArray类型进行中间的装换,实现代码如下:首先定义:CByteArraym_array;将char型数组中的数值赋值到m_array中 for(inti=0;im_array[i]=sbuf[i]; 

  • 客户信息管理系统_销售找客户最好的app

    客户信息管理系统_销售找客户最好的app客户信息管理系统课程设计的题目及简介设计说明程序流图程序清单Customer类MainView类Tools类DataManager类调试结果课程设计体会课程设计的题目及简介客户信息管理系统,功能如下:(1)添加客户信息(2)修改客户信息(3)删除客户数据(4)查询客户列表(5)所有数据通过JDBC保存到MySql数据库中1,数据库名:cms_hisoft2,表名:users3,字段列表和类型:id,int,主键,自动增长name,varchar(20),姓名gender,var

    2022年10月17日
  • vue跨域问题的三种解决方案_vue上线之后跨域问题

    vue跨域问题的三种解决方案_vue上线之后跨域问题方案1:使用vue自带配置文件解决跨域问题(1)这个Vue项目有自带config文件的方式proxyTable:{‘/fh’:{target:’http://localhost:8080/’,//设置你调用的接口域名和端口号别忘了加httpchangeOrigin:true,//這裡true表示实现跨域pathRewrite:{‘^/fh’:’/’//

发表回复

您的电子邮箱地址不会被公开。

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