oracle中sql优化】的更多相关文章

问题描述:刚开始做项目的时候没啥感觉,只用能出来结果,sql随便写,但是后来用户的数据量达到几万条是,在访问系统,发现很多功能加载都很慢,有的页面一个简单的关联 查询居然要花费30多秒,实在是不能忍,所以自己研究了一下sql优化技巧,特此记录一下: 1. exists和in的使用 参考文档:https://www.cnblogs.com/liyasong/p/sql_in_exists.html (1) exists是用循环(loop)的方式,由outer表的记录数决定循环的次数,所以,外表的记…
Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统的资源消耗.方法1:a.在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗. b.不改写SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗.注意:走索引不一定比全表扫描好,例如在很多情况下走索引的嵌套循环连接的执行效率往往比不上走全表扫描的哈希连接的执行效率.方法2:…
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)Description_info (30条数据)  select *  from description_info di      ,student_info     si --学生信息表where si.student_id = di.lookup_code(+)   and di.lookup_t…
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土Oracle数据库性能优化顶级大师泣血力作 集十数年实战修行与潜心钻研之大成 盖国强等国内数据库一线名家联合推荐 囊括数据库性能优化技术所有分支与脉络,讲解通俗,实例经典 内容提要 <基于Oracle的SQL优化>是一本与众不同的书,它的目的是使读者真正掌握如何在 Oracle数据库里写出高质量的…
优化器: 1.优化器的模式: 用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点.这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本值时,计算成本值的方法会随着优化器模式的不同而不同. Oracle中,优化器的模式是由参数OPTIMIZER_MODE的值来决定的. RULE:表示Oracle将使用RBO来解析目标SQL,此时SQL中涉及的各个对象的统计信息对于RBO没有任何作用. CHOOSE:Oracle 9i的默认值,表示RBO…
[基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库数据较少,对于sql语句各种写法的编写体现不出sql的性能优劣,随着数据的不断增加,出现海量数据,劣质sql与优质sql在执行效率甚至存在百倍差距,可见sql优化的重要性 二.Sql语句性能优化 2.1 认识Oracle的执行过程 2.2 Oracle优化法则---漏斗法则 2.3 Oracle 执…
在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执行计划的方法. 本文示例SQL为: --set lines 1000 pages 1000 select a.empno, a.ename, b.dname, a.job, a.sal from emp a, dept b where a.deptno = b.deptno and empno = 7788;…
http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作.如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够抛砖引玉,和大家一起探讨SQL优化方法. 另外,还简单介绍了两种解决疑难SQL优化问题的工具:1005…
本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发艺术>副主编 Oracle ACEA,ITPUB开发版资深版主,十年电信行业从业经验 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作…
Oracle中CBO优化器简介 Oracle数据库中的优化器是SQL分析和执行的优化工具.它负责制定SQL的执行计划,也就是它负责保证SQL的执行计划的效率最高,比如优化器决定Oracle以什么样的方式访问数据,优化器是SQL执行的核心,它作出的执行计划的好坏,直接影响着SQL的执行效率. 1.执行计划中数据的访问方式: 直接表(无索引)的访问:并行 多数据块 通过索引访问:index unique scan(=唯一值) Index range scan(<,>范围) Index full s…
专题第一篇<Oracle之SQL优化专题01-查看SQL执行计划的方法>讲到了查看SQL执行计划的方法,并介绍了各种方法的应用场景,那么这一篇就主要介绍下如何看懂SQL的执行计划.毕竟如果SQL的执行计划都看不懂,那优化就无从谈起了. 关于如何看懂SQL的执行计划,我把它简单分为3个部分: 1.判断执行计划的执行顺序 2.理解执行计划每步的含义 3.了解执行计划相关的信息 1.判断执行计划的执行顺序 口诀:先子后父,先上后下. 一般简单的执行计划可以直接根据这个口诀来判断执行计划的执行顺序.类…
Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlter/drop/truncate/rename/grant/revoke/audit/noaudit3.DCL 事务控制语句:commit/rollback/savepoint/set transaction 会话控制语句:alter session set... 系统控制语句:alter syst…
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字段名等相关信息(如下图),这过程会花比较长的时间,因为它要分析语句的语法与语义.然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句与对应的执行计划等信息. 2.当用户第二次请求或多次请求时,Oracle会自动找到先前的语句与执行计划,而不会进行Hard parse,而…
oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样?   和sqlserver的不一样sqlserver或者access中select into 是通过查询数据来建表oracle中,这个select into不能在语句中执行,必须要放到存储过程,函数等等里边执行譬如select to_char(sysdate,'yyyy-mm-dd') into v_date from dual;这个v_…
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.…
SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据.因此,执行时间是SQL优化的重要指标.在SQL查询中,I/O操作最占系统性能的.I/O操作量越大,时间越久.减少I/O操作量是优化SQL的目标.同时,CPU,缓存命中率也很重要. 并不是所有SQL都需要被优化,使用频率高,性能差的SQL语句需要重点被优化.可以通过查看v$sqlarea表,访问OEM来查找. 注意不同版本的Oracle使用不同的优化器.11g的优化器基于代价(Cost Based Optimizer)(考虑SQL执行耗…
个人总结SQL脚本优化,大体如下: (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表dirving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表. (2)WHERE子句中的连接顺序: ORACLE采用自下…
1.   ACS简介 Oracle Database 11g提供了Adaptive Cursor Sharing (ACS)功能,以克服以往不该共享的游标被共享的可能性.ACS使用两个新指标:sensitivity and bindawareness来实施该特点. 2.   ACS机制 2.1.  Adaptive Cursor Sharing Metadata:Oracle 11g也提供了三个新视图和动态视图V$SQL的两个新列来允许DBA来确定优化器是否已经确定一个SQL语句为一个ACS的候…
select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方法查询结果每条记录显示一条查询语句,且仅仅能查询sql_text小于1000字符的,多余的会被截断.         改进一下: select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00' and sql_text like '…
一. Bulk 概述 本来只想测试一下Bulk Collect 和update性能的,但发现Bulk 的东西还是很多的,在OTN上搜了一些,整理如下. 1.1 Bulk Binding 和 Bulk SQL From:  http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_packages.htm#ADFNS343 Oracle Database uses two engines to run PL/SQL b…
查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入SGA的共享池的库高速缓存区(library cache)中并将完成一下处理. 1.首先在共享池中搜索是否有相同的sql语句(正文),如果没有就进行后续的处理. 2.检查sql语句的语法是否正确 3.通过查看数据字典来检查表和列的定义是否有效 4.对所操作的对象加编译锁,以便在编译语句期间这些对象的…
该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅使用,因本人未发现本博客支持附件上传功能,需要PDF文件格式的朋友可向我要,也可到群里下载,转载请注明出处. 1.查询v$sql_plan: SQL> col "Query Plan_Table" format a100 SQL> select id,lpad(' ', 2*(…
1.   简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计数据,已有应用改变,甚至数据库版本升级带来的影响.本文帮助对SPM原理基本了解,并对其性能优化能力进行简要的说明. 2.   SPM原理和机制 Oracle 11g通过一个简单而优雅的方法实施了解决SQL计划意外恶化的一套称为SQL Plan Management(SPM)的新特点.只要用户会话开启…
详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的含义,以及如何在Oracle数据库中稳定执行计划. 2.1什么是执行计划 为了执行SQL语句,Oracle在内部必须实现许多步骤,这些步骤可能是从数据库中物理检索数据行,或者用某种方法来准备数据行等,接着Oracle会按照一定的顺序依次执行这些步骤,最后将其执行结果作为目标SQL的最终执行结果返回给…
201704171025 01. 列rows记录的就是执行计划中每一个执行步骤所对应的Cardinality的值 列Cost(%CPU)记录的就是执行计划中的每一个执行步骤对应的成本 02. Computed Cardinality=Original Cardinality * Selectivity 03.简单谓词连接 04.B树索引 05.索引连接方式 索引唯一扫描  是针对唯一索引的扫描,它仅仅适用于where条件里是 等值查询的目标sql.因为扫描的对象时唯一性索引,索引索引唯一性扫描的…
行链接 产生原因:当一行数据大于一个数据块,ORACLE会同时分配两个数据块,并在第一个块上登记第二个块的地址,从而形成行链接. 预防方法:针对表空间扩大数据块大小.检查:analyze table 表名 validate structure cascade into chained_rows; --- PCTFREE试验准备之建表DROP TABLE EMPLOYEES PURGE;CREATE TABLE EMPLOYEES AS SELECT * FROM HR.EMPLOYEES ;de…
我们看看 TiDB 一段代码的实现 --- 左外连接(Left Out Join)的消除; select 的优化一般是这样的过程: 在逻辑执行计划的优化阶段, 会有很多关系代数的规则, 需要将逻辑执行计划(LogicalPlan)树应用到各个规则中, 尝试进行优化改写; 我们看看其中的一条优化规则: outerJoinEliminator TiDB作为优秀的开源项目, 代码的注释也非常优秀, 里面提到了满足这些条件的 Left Outer Join 可以消除右表; // tryToElimina…
如果表中的时间字段是索引,那么时间字段不要使用函数,函数会使索引失效. 例如: select * from mytable where trunc(createtime)=trunc(sysdate);--不走索引,慢吞吞.createtime字段有时分秒,使用trunc()函数去除时分秒,只保留年月日 改进方案: select * from mytable where createtime between to_date(to_char(trunc(SYSDATE), 'yyyy/mm/dd…
方法:SELECT Trunc(MONTHS_BETWEEN(SYSDATE,BIRTH_DATE)/12) FROM 某表 Trunc函数在这里对带有小数位数的数字取整数部分: SYSDATE为oracle的获取当前日期的函数: BIRTH_DATE为我自己的数据库表中存储生日日期的字段. 实际执行SQL: --根据出生日期计算年龄SELECT Trunc(MONTHS_BETWEEN( to_date(to_char(sysdate, 'yyyy-MM-dd'),'yyyy-MM-dd'),…
oracle数据库 select {distinct} * | 具体列  别名 from table {where 条件} {order by 排序字段1,排序字段2 asc | desc} 简单查询语句 灵活显示查询信息 select '编号是:'||empno||'的雇员,姓名是:'||ename||',工作是:'||job from emp; 使用四则运算 select ename, sal*12 income from emp; 限定查询 查询出工资大于1500的所有雇员信息 selec…