Oracle数据库如何提高访问性能
A,避免在索引列上使用 IS NULL 和 IS NOT NULL 操作
避免在索引中使用然后可以为空的列,ORACLE将无法使用该索引。对于单列索引 如果包含空值,索引将不存在此记录。对于复合索引 如果每个列都为空,索引中同样不存在此记录。如果至少有一个列不为空则记录存在于索引中
B, 用 UNION 替换 OR (适用于索引列)
通常情况下,用UNION替换where子句中的OR会起到较好的作用。对索引列使用OR会造成全表扫描。(以上规则只针对多个索引列有效,如果column没有被索引,查询效率可能会因为没有用OR而降低)
C, 分离表和索引
总是将你的表和索引建立在不同的表空间内(TABLESPACES).决不要将不属于ORACLE内部系统的对象存放到SYSTEM表空间里。同时,确保数据表空间和索引表空间于不同的硬盘上(通过指定表空间的方式可以实现这个要求)
D ,共享SQL语句
为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中,这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享,因此,当你执行一个SQL语句(有时被称为个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句.这里需要注明的是,ORACLE对两者采取的是一“种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)
E,WHERE子句连接顺序
WHERE子句中的连接顺序,
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数让记录的条件必须写在WHERE子句的末尾
F,SELECT 子句避免使用 *
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 * 是一个方便的方法。 但,不幸的是 这是一个非常低效的方法.实际上,ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时
G,使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表,
例如:
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT_NO= 0020
AND ENAME LIKE 'SMITH%';
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT NO = 0030
AND ENAME UKE 'SMITH%';
你可以用DECODE函数高效地得到相同结果
SELECT COUNT(DECODE(DEPT NO,0020,'X',NULL)) D0020_ COUNT,COUNT(DECODE(DEPT NO,0030,'X',NULL)) D0030_ COUNT,SUM(DECODE(DEPT NO,0020,SAL,NULL) D0020_ SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL) D0030_ SAL FROM EMP WHERE ENAME LIKE 'SMITH%';
类似的,DECODE函数也可以运用于GROUP BY和ORDER BY子句中。
H,用TRUNCATE替代DELETE
当删除表中的记录时,在通常情况下,回滚段(rollback segments)用来存放可以被恢复的信息。如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息,当命令运行后,数据不能被恢复因此很少的资源被调用,执行时间也会很短。
(注意: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
I,尽量多使用COMMIT
只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:COMMIT所释放的资源:
a.回滚段上用于恢复数据的信息,
b.被程序语句获得的锁
C. redo log buffer中的空间
d. ORACLE为管理上述3种资源中的内部花费
(注意:在使用COMMIT时必须要注意到事务的完整性,现实中效率和事务完整性往往是鱼和熊掌不可得兼)
J,WHERE子句替换HAVING子句
避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤.这个处理需要排序,总计等操作.如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
K,用EXISTS替换IN
在许多基于基础表的查询中,为了满足一个条件,往往 需要对另 一个表进行联接 在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率
L,用NOT EXISTS替代NOT IN
在子查询中,NOT IN子句将执行一一个内部的排序和合并无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历).为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS
Oracle数据库如何提高访问性能的更多相关文章
- 通过缓存数据库结果提高PHP性能(转)
众所周知,缓存数据库查询的结果可以显著缩短脚本执行时间,并最大限度地减少数据库服务器上的负载.如果要处理的数据基本上是静态的,则该技术将非常有效.这是因为对远程数据库的许多数据请求最终可以从本地缓存得 ...
- Holer实现oracle数据库外网访问
外网访问内网Oracle数据库 内网主机上安装了Oracle数据库,只能在局域网内访问,怎样从公网也能访问本地Oracle数据库? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安 ...
- ORACLE数据库学习之SQL性能优化详解
Oracle sql 性能优化调整 ...
- Oracle数据库的sql语句性能优化
在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目 ...
- DB2数据库中提高INSERT性能详解
分类: Linux INSERT 处理过程概述 首先让我们快速地看看插入一行时的处理步骤.这些步骤中的每一步都有优化的潜力,对此我们在后面会一一讨论. 在客户机准备 语句.对于动态 SQL,在 ...
- Oracle数据库穿越防火墙访问
原因 Oracle listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后spawned一个新的数据库连接,这个连接端口由listener传递给客户机,此后客户 ...
- Oracle数据库十大常见性能问题
错误的连接管理 oracle的连接是耗时耗力的操作,不应像sqlserver那样使用连接 错误的使用游标和共享池 一般是没有使用绑定变量 不好的SQL语句 使用大量资源的SQL语句都应该好好检查是否可 ...
- 实现asp.net mvc页面二级缓存,提高访问性能
实现的mvc二级缓存的类 //Asp.Net MVC视图页面二级缓存 public class TwoLevelViewCache : IViewLocationCache { private rea ...
- 访问Oracle数据库的工具【unfinished】
ylbtech-Oracle:访问Oracle数据库的工具 访问Oracle数据库的工具 1. SQL*PLUS返回顶部 1.0, 1.0.1, 之network\admin\tnsnames.ora ...
随机推荐
- Spring-Cloud之Eureka排坑之旅
1 快速demo 1.0 环境说明 Intelli IDEA+Spring Boot 1.1 新建工程chap52(通过New Project->Spring Initializer-> ...
- SSD磁盘测试不达标排查
最近购买了一块4T的Inter_SSD_D3-4510硬盘安装在了一台DELL PowerEdge R640服务器,经过测试发现磁盘和产品手册上描述的性能相差过大,相当于产品手册性能的1/2,一下是 ...
- 下载 rpm 源码包并重新编译
$ yumdownloader --source gdb $ rpmbuild --rebuild gdb-7.8.1-30.fc21.src.rpm $ cd ~/rpmbuild/SPECS/ $ ...
- GitHub 轻松提速教程
通过修改hosts文件来提速,获取github的IP地址 访问:https://www.ipaddress.com/ 网址 依次获取以下三个网址的IP github.com github.global ...
- 第六节:详细讲解Java中的装箱与拆箱及其字符串
前言 大家好,给大家带来详细讲解Java中的装箱与拆箱及其字符串的概述,希望你们喜欢 装箱与拆箱 封装类有:Byte , short , Integer , Character , long , Fl ...
- antd在webpack里面的配置
概述 antd是蚂蚁金服打造的一个react组件,真的非常棒,我看了下官方文档,感觉比bootstrap要好.唯一的缺点可能就是打包的时候要打包它的一些样式表,所以资源体积会很大,并且css可能会和自 ...
- 列表list切片
list1 = [1, 2, 3, 4, 5, 6] list1[::-1] >>>[6, 5, 4, 3, 2, 1] list1[:3:-1] >>>[6, 5 ...
- Xamarin.Android 记住账号
1.存储登陆信息 if(login_cb_user.Checked) { ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPr ...
- CentOS 7 开启 SNMP 实现服务器性能监控
1.检测是否有 SNMP 服务 service snmpd status 2.若没有则安装 yum install -y net-snmp 3.编辑 SNMP 的配置文件,设置安全的验证方式 vi / ...
- CentOS安装Memcached
安装&配置 wget http://memcached.org/latest -O memcached.tar.gz tar -zxvf memcached.tar.gz cd memcach ...