在6月24日,这天我写了《提高Oracle性能--经验实谈》http://rdqwhr.iteye.com/blog/207320这篇文章,一直想争得JAVAEYE的Oracle专家给予解答。作为技术上的问题受多方面的因素制约,比如说机器的软硬件环境,再加上Oracle中是否使用到视图、同义词等。迫于给大家一个完整的解释,我做了多方面的测试,以供参考(注:以下数据建立在多次结果的平均值上)。
我的机器运行环境是:Pentium D 2.8, 1G RAM, 160G 5400转硬盘;Oracle9i.对于该SQL文所用到的表未使用视图、同义词和序列。
大家从我给出的SQL文中不难看出,我将原SQL文的第二个检索条件
(A.ZK_SK_CD='1'
AND A.ZK_KSHN_DY=TO_DATE('99991231','YYYYMMDD')
AND DN_DY<TO_DATE('20080601',
'YYYYMMDD'))
OR (A.ZK_SK_CD='1'
AND A.DN_DY BETWEEN TO_DATE('20080601','YYYYMMDD')
AND TO_DATE('20080623','YYYYMMDD'))
作了变更。因为这段SQL文慢就慢在这里。
于是,我就开始做了第一个测试:我将我数据库中的数据删减至4000条以内(这是一个比较值得参考的数据,验证所得),整个SQL的执行效率就变得非常高了,速度可以控制在12S以内。在这里可以说明一点,数据库中数据记录过多的话,OR的执行效率明显降低,更何况我的库里有超15万条得记录。
接着我又作了第二个测试:不改动SQL文,直接添加如下索引,里面包括查询、计算、分组等所有列(在对日开发中,要增加一个索引非常麻法,还得经过层层的申请;而日方已在我的障害要领书上注明,最好更改SQL文。)
CREATE INDEX KMJ.TRNSCTNFK16
ON KMJ.TRNSCTN
(HNSHTN_CD, ZK_SK_CD, ZK_KSHN_DY, DN_DY, DN_GYBN_KB, DN_KB, GY_NB, KKR_KB)
PCTFREE 20
INITRANS 2
MAXTRANS 255
TABLESPACE KMJDB_IDX
STORAGE(INITIAL 16K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
LOGGING
/
此时,SQL的性能也有较大的改变,性能提高到了20s左右。毕竟此方法在外不得已的情况下是不会被日方所采纳的,因此行不通。所以我只有在OR关键字上下一番功夫或许能够进一步优化此SQL语句了。
紧接着,我就进行了第三次测试:想来想去只能用UNION ALL(UNION)了。由于原SQL文涉及到分组计算,不便在WHERE关键字之后进行UNION或UNION ALL的操作。我将这两个条件作为两个查询,将得到的两张表UNION ALL(从这两个条件可以看出,检索出来不可能有重复的记录)成一张虚表。这样有一个好处:因为这样一张表将位于高速缓存区中,提高了后面主查询的效率。照这样修改之后整条SQL语句的执行时间也超不过9S。
通过以上的测试说明两个问题:
一是OR在少量的数据中执行效率确实比较高,一旦数据接近四千条以后,性能明显地降低,有必要考虑UNION或者UNION ALL;
二是在海量数据的查询中,仅仅依靠索引并不一定是最佳的优化方案,视具体情况而定。
分享到:
相关推荐
1. **高性能**:通过减少I/O路径中的层次,提高数据读写速度。 2. **简单性**:简化磁盘的管理和配置,使得ASM可以透明地识别和使用磁盘。 3. **可靠性**:提供故障检测和恢复机制,确保数据的安全性。 4. **自动化*...
oracleasm-support-2.1.4-1.el5.x86_64.rpm 适用于内核为2.6.18-164.el5环境使用
oracleasm-support-2.1.8-1.el6.x86_64.rpm
oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.x86_64.rpm
包含如下oracleasm包: kmod-oracleasm-2.0.6.rh1-3.el6.x86_64.rpm oracleasm-2.0.8-4.el6_6.src.rpm oracleasm-2.0.8-6.el6_7.src.rpm oracleasm-2.0.8-8.el7.src.rpm oracleasm-2.0.8-15.el7.centos.src.rpm ...
centos 7 oracleasm-support el7 rpm 安装包
Oracle Support for Oracle ASM (Automatic Storage Management) 和 Kmod-OracleASM 包是Oracle数据库系统在Linux环境下进行存储管理的关键组件。这些包确保了在Red Hat Enterprise Linux (RHEL)、CentOS以及Oracle ...
- **性能优化:** 虽然限制了资源使用,但可以通过调整 SQL 查询和索引来提高性能。 Oracle XE 11.2.0 是一个强大且易于入门的数据库解决方案,尤其适合学习 Oracle 数据库基础、开发小型项目或进行测试环境搭建。...
2. **安装依赖**:运行`yum install oracle-rdbms-server-11gR2-asm-*`来安装所有必要的ASM组件,包括kmod-oracleasm。 3. **加载内核模块**:使用`modprobe oracleasm`命令加载Oracle ASM内核模块。 4. **初始化ASM...
oracleasm-2.6.18-194.32.1.el5-2.0.5-1.el5.x86_64.rpm
Asmlib(Oracle ASM Library)则是一个可选的库,它提供了一种更高效的方式来访问存储设备,尤其在Oracle数据库上,可以提高I/O性能和稳定性。 在Red Hat 6.5环境下,Oracle RAC的安装过程会涉及到Oracleasm的配置...
Oracle ASM(Automatic Storage Management)是Oracle数据库系统中的一个组件,用于提供高效、自动化的存储管理功能。...正确安装和配置这些组件是成功部署Oracle ASM的前提,也是优化数据库性能和可靠性的关键步骤。
ORACLE数据库-TNS协议分析详解ORACLE数据库-TNS协议分析详解ORACLE数据库-TNS协议分析详解ORACLE数据库-TNS协议分析详解
总结来说,"oracle-rdbms-server-11gR2-preinstall"工具是Oracle Linux 6环境下安装Oracle 11g R2数据库的一个强大助手,它简化了环境准备步骤,提高了安装效率,同时也降低了由于手动配置错误导致的问题。...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
oracleasm-2.6.18-128.el5-2.0.5-1.el5.i686.rpm oracleasmlib-2.0.4-1.el5.i386.rpm oracleasm-support-2.1.1-1.el4.i386.rpm X64: oracleasm-support-2.1.8-1.el5.x86_64.rpm oracleasmlib-2.0.4-1.el5.x86_64....
本篇文章将根据提供的资料,深入解析Oracle DBA的入门、进阶及诊断案例。 一、Oracle DBA入门 1. 数据库概念:理解数据库的基本构成,如表空间、数据文件、控制文件、重做日志、实例等。 2. 安装与配置:学习如何在...