![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL TUNING
文章平均质量分 83
colin_liu2009
这个作者很懒,什么都没留下…
展开
-
通过锁定统计信息来锁定执行计划
今天在群里面看到一个消息。提问是这样的 他认为oracle 10g很痛苦,随着数据量的变化,sql的执行计划在不停的改变,导致同一个存储过程,时间点不同,执行效率就不同.他的问题是有没有好的方法让执行计划不改变,个人认为是锁定统计信息。如何锁定统计信息,下面来分布说明:1. 首先收集统计信息:BEGIN DBMS_STATS.GATHER_TABLE_STATS(own原创 2011-11-15 12:03:21 · 3035 阅读 · 0 评论 -
VIEW新的理解
create table test1 as select * from dba_objects where object_id test1有38笔数据create table test2 as select * from dba_objectscreate table test3 as select * from dba_objectscreate table test4 as s原创 2012-03-28 11:22:58 · 556 阅读 · 0 评论 -
索引失效原因总结
今天一个同事突然问我索引为什么失效。说实在的,失效的原因有多种:但是如果是同样的sql如果在之前能够使用到索引,那么现在使用不到索引,以下几种主要情况:1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全表)2. 统计信息失效 需要重新搜集统计信息3. 索引本身失效 需要重建索引下面是一些不会使用到索原创 2012-02-28 10:38:23 · 53518 阅读 · 3 评论 -
执行计划 - EXPLAIN PLAN产生的操作和选项值
AND-EQUAL.接受多组rowid的操作,返回集合的交集,消除重复。用于在单列索引访问路径。BITMAPCONVERSIONTO ROWIDS:转换位图表示为的可用于访问表的实际rowid。FROM ROWIDS:转换rowids为位图表示。COUNT:如不需要实际值,返回ROWIDs数量。BITM转载 2012-02-08 14:42:09 · 2030 阅读 · 0 评论 -
如何创建合适的索引
索引的创建直接关系到执行sql语句的好坏,下面举个实例:SELECT SR_KPI_TYPE, SR_ASSESS_TYPE, SR_BSS_ORG_ID, SR_BSS_ORG_NAME, SR_CHANNEL_TYPE_ID, 0 GZ_HSL_AMOUNT_CUR,原创 2012-01-31 17:01:07 · 934 阅读 · 0 评论 -
arraysize和consistent get的关系
首先看一下两个词的定义arraysizeArraysize specifies how many rows SQL*Plus will fetch in a call. The number n can be between 1 and 5000.arraysize定义了一次返回到客户端的行数,当扫描了arraysize 行后,停止扫描,返回数据,然后继续扫描。所以假如一个数据块超过A原创 2011-12-26 17:07:52 · 911 阅读 · 0 评论 -
oracle 所有 hint
oracle 10g 有64个hints , 11g 增加到71 个, 下表中红色的代表已经过时的, 粗体的是11g 新增.Optimization Goals and Approaches (2)Access Path Hints (17)Other (20)Join Operation (7)ALL_ROWSFIR转载 2011-12-13 14:55:53 · 1040 阅读 · 0 评论 -
使用with as优化sql解决filter
最近一个地市的报表系统老是说数据出得慢,基本上要到中午才能出数据,但是查看过程是比较简单的。后来发现一条sql有问题,居然要跑5个多小时。查看跑2个小时以上的sqlSELECT SQ.SQL_TEXT, S.SQL_ID, S.SID, S.SERIAL#, S.LAST_CALL_ET, TO_CHAR(S.原创 2011-11-10 10:52:21 · 3786 阅读 · 1 评论 -
oracle执行计划中的filter
filter这个操作在《Cost Based Oracle Fundamental》此书第九章有介绍。filter的操作是对外表的每一行,都要对内表执行一次全表扫描,所以很多时候提到filter都会感到可怕。他其实很像我们熟悉的neested loop,但它的独特之处在于会维护一个hash table。其实filter 的性能实际上跟列值distinct数有关,oracle在执行的时候实际上做了很原创 2011-11-30 15:07:56 · 14534 阅读 · 1 评论 -
oracle三组难缠的hint no_unnest/unnest,push_subq,push_pred
最近在看一个哥们优化sql里面,使用到了几个特殊的hint,但我总是对此不解,所以针对此问题自己做了一些测试(参考了一些资料) 1. no_unnest, unnest unnest我们称为对子查询展开,顾名思义,就是别让子查询孤单地嵌套(nest)在里面。 所以un_unnest双重否定代表肯定,即让子查询不展开,让它嵌套(nest)在里面。 如果一个查询中的where 中出现原创 2011-11-30 11:58:14 · 6032 阅读 · 0 评论 -
使用merge into优化update语句
最近项目进入白热化阶段,在工作忙碌之余,突然收到一个同事的请求,说表里面只有20多万行的数据,使用update语句,已经跑了30分钟,为什么还没有出结果。我就马上把他的语句拿来看:查看一下执行计划:执行计划是old version,重新建一下plan_table表: 存在资源繁忙,我把刚才执行的语句关闭掉就OK,现在从新看一下执行计划:现在可原创 2011-11-28 10:18:54 · 1397 阅读 · 0 评论 -
left/right join 和+的区别
今天下午在看到群里面讨论一个话题,left/right join 和+在oracle中有没有区别,下面我查找一下相关的资料:The Oracle9i database offers join syntax that is SQL: 1999 compliant. Prior to the 9i release, the join syntax was different from the AN原创 2011-11-01 15:09:07 · 782 阅读 · 0 评论 -
优化器(CBO)的统计信息
优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划。优化器统计信息包括:· 表的统计信息o 行数o Block数o 行平均长度· 列的统计信息o 列中不同值的数量o 列中null的数量o 数据分布(柱状图/直方图)·原创 2011-11-01 11:13:43 · 997 阅读 · 0 评论 -
ORACLE柱状图(histogram)
oracle 柱状图(histogram)oracle中的柱状图是用于记录表中的数据分布质量情况的描述,当每次使用analyze或者dbms_stat包分析数据表及列后,该表的分布情况会呗保存在统计表(user_tab_columns/user_histograms)里面,当多表连接时,CBO优化器会根据柱状图提供的信息评估多表连接时将产生的成本(cost)或技术(cardinality)原创 2011-10-31 15:36:27 · 7507 阅读 · 0 评论 -
sql trace基础
一、 基础.SQL_TRACE1. 在全局启用 在参数文件(pfile/spfile)中指定:sql_trace =true在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用.提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件转载 2011-09-29 17:16:50 · 1481 阅读 · 0 评论 -
db block gets&&consistent gets&&physical reads
db block get s : number of data blocks read in CURRENT mode ie) not in a read consistentfashion, but the current version of the data blocks. 产生db_block_gets的主要方式:1.DML like Update, Delete will nee转载 2012-03-30 15:49:50 · 735 阅读 · 0 评论