Oracle性能优化学习笔记之选择最有效率的表名顺序

        选择最有效率的表名顺序(只在基于规则的优化器中有效)

        ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.

例如:

        表 TAB1:16,384 条记录、表 TAB2:1 条记录

        选择TAB2作为基础表 (最好的方法):执行时间0.96秒

select count(*) from tab1,tab2 

        选择TAB2作为基础表 (不佳的方法):执行时间26.09秒

select count(*) from tab2,tab1

       如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.
例如:

      EMP表描述了LOCATION表和CATEGORY表的交集.

SELECT *
FROM LOCATION L ,
      CATEGORY C,
      EMP E
WHERE E.EMP_NO BETWEEN 1000 AND 2000
AND E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN

将比下列SQL更有效率:

SELECT *
FROM EMP E ,
LOCATION L ,
      CATEGORY C
WHERE  E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
AND E.EMP_NO BETWEEN 1000 AND 2000

小注:
       本文摘自百度文库,具体链接木有找到,抱歉。

时间: 2024-11-01 04:49:22

Oracle性能优化学习笔记之选择最有效率的表名顺序的相关文章

Oracle性能优化学习笔记之共享Sql语句

       为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中.这块位于系统全局区域SGA(systemglobal area)的共享池(shared buffer pool中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前执行过的语句完全相同,Oracle就能很快获得已经被解析的语句以及最好的执行方案.Oracle的这个功能大大地提高了SQL的执行性能并节省了内存的使用.        可惜的是ORACL

Oracle性能优化学习笔记之WHERE子句中的连接顺序

        ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.         例如:        (低效,执行时间156.3秒) SELECT - FROM EMP E WHERE SAL > 50000 AND JOB = 'MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);      

kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1606422 本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口

mysql性能优化学习笔记

mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 32位不能使用超过4G的内容,因此选择的时候需要注意. myisam innodb 磁盘的配置和选择 机械硬盘: 存储容量 传输速度 访问时间 主轴转速 物理尺寸 使用RAID增加传统机器硬盘的性能 RAID:一系列小磁盘组成大磁盘,数据冗余 RAID 0 :成本最低,但是没有数据冗余会造成数据丢失

mysql性能优化学习笔记-参数介绍及优化建议

MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global 参数名=参数值; set @@global.参数名 :=参数值; 会话参数 set [session] 参数名=参数值; set @@session.参数名 :=参数值; 内存配置相关参数 确定可以使用的内存的上限 确定mysql每个连接使用的内存 sort_buffer_size:需要注意,每个

mysql性能优化学习笔记-存储引擎

mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言的,不针对库 mysql存储引擎 mysql存储引擎之MyISAM 5.5前默认的存储引擎.临时表(查询.排序时由查询优化器生成的表).系统表 特性: 并发性与锁级别(表级锁), 表损坏修复,检查check table tablename,修复repair table tablename 此外也可以

ORACLE性能诊断―学习statspack笔记(一) [安装与测试]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(一)   作者:刘颖博 时间:2004-3-2 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:oracle8.1.6开始引进statspack,statspack是诊断oracle性能的强有力的工具   安装前准备   A.首先是系统参数的确认: job_query_processes:为了建立自动任务,执行数据收集,该参数要大于0 time_statistics:为了收集操作

ORACLE性能诊断―学习statspack笔记(二)[概述]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(二)[概述]   作者:刘颖博 时间:2004-3-3 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   ORACLE性能诊断涉及对象   A.      服务器.网络以及磁盘(外部的环境) B.      实例(SGA,后台进程) C.      对象(表,索引,段--) D.     SQL E.      设计(指的是应用的设计,这部分一般说来是很难改变了)   ORACLE性能诊

ORACLE性能诊断―学习statspack笔记(三)[表的分类]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(三)[表的分类]   作者:刘颖博 时间:2004-3-10 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:STATSPACK并不能获取全面分析性能问题所需要的所有信息.特别是问题出在DISK,RAM,CPU以及NETWORK等数据库外部.   STATSPACK表的分类 A:控制表:stats$database_instance ,stats$snapshot B:参数表:s