Oracle SQL 调优
文章平均质量分 71
Laughing
淡定......
展开
-
Oracle中的merge join Cartesian
在执行计划中,有时会出现CARTESIAN笛卡尔乘积,简单的说一下什么叫cartesian?就是有两个集合,每个集合的任意一个成员都要与另外一个集合的任意一个成员有关联...下面是关于cartesian的一些实验:SQL> set linesize 2000SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------T转载 2011-04-23 23:57:00 · 8295 阅读 · 0 评论 -
使用outline稳固sql执行计划
为指定的sql创建outlineUSE_STORED_OUTLINESSyntax:USE_STORED_OUTLINES = { TRUE | FALSE | category_name }this parameters are not initialization parameters, so you cannot set them in a pfile or spfile.原创 2012-07-24 22:35:23 · 1952 阅读 · 0 评论 -
Optimizer Transformations: Subquery Unnesting part 1
We have received a ton of requests for more information on Oracle Optimizer Transformations so we thought we would put together a series of blog posts describing the most commonly used transformations转载 2012-08-11 21:30:27 · 955 阅读 · 0 评论 -
Optimizer Transformations: Subquery Unesting part 2
In Part one of our blog series on Optimizer transformations we discussed Subquery unesting. We explained how subqueries are evaluated, and the unnesting of EXISTS and ANY subqueries.Here in part t转载 2012-08-13 20:29:17 · 854 阅读 · 0 评论 -
直方图(Histogram)对CBO的影响
对于有列数据非常倾斜的表,做直方图分析很重要,直方图主要讨论的是数据在列上的分布情况。SQL> select * from v$version where rownum<2;BANNER--------------------------------------------------------------------------------Oracle Database 11g En原创 2011-04-16 23:03:00 · 763 阅读 · 0 评论 -
Oracle LEFT JOIN中ON条件与WHERE条件的区别
Oracle LEFT JOIN中ON条件与WHERE条件的区别JOIN中的ON条件与WHERE条件是一样的,而LEFT JOIN却不一样SQL> create table t1 as select * from scott.emp; 表已创建。 SQL> create table t2 as select * from scott.dept; 表已创建。原创 2011-03-10 21:17:00 · 33850 阅读 · 0 评论 -
通过分析SQL语句的执行计划优化SQL(总结)
目录第1章 性能调整综述第2章 有效的应用设计第3章 SQL语句处理的过程第4章 ORACLE的优化器第5章 ORACLE的执行计划 访问路径(方法) -- access path 表之间的连接 如何产生执行计划 如何分析执行计划 如何干预执行计划 - - 使用hints提示转载 2011-01-26 21:45:00 · 992 阅读 · 0 评论 -
分析如何影响CBO决策一例
SQL> conn evan/evanConnected.SQL> select * from v$version where rownum<2;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Editi原创 2011-04-15 23:13:00 · 477 阅读 · 0 评论 -
INDEX FAST FULL SCAN,INDEX FULL SCAN与排序
SQL> select * from v$version where rownum<2;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit P原创 2011-04-19 23:21:00 · 846 阅读 · 0 评论 -
runstats相关
V$STATNAME显示 V$SESSTAT 和 V$SYSSTAT表中的统计信息名称 Thisview displays decoded statistic names for the statistics shown inthe V$SESSTAT and V$SYSSTAT tables.Onsome platforms, the NAME and CLASS col原创 2011-05-31 23:21:00 · 822 阅读 · 0 评论 -
Oracle 表连接方法
How the Query Optimizer Executes Join StatementsTo choose an execution plan for a join statement, the optimizer must make these interrelated decisions:Access PathsAs for simple statements, t原创 2011-03-22 22:09:00 · 973 阅读 · 0 评论 -
Oracle sql 性能优化【来自于网络】
Oracle sql 性能优化调整1.选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FI转载 2011-01-22 21:44:00 · 704 阅读 · 0 评论 -
sqlplus AUTOTRACE功能
当使用oracle AUTOTRACE功能时,在oracle内部实际上启动了两个会话(session)连接,一个session用于执行查询等操作,另一个session用于记录执行计划和输出最终结果等操作。在启用AUTOTRACE之前:SQL>select sid,serial#,username from v$session t where t.username is not null;原创 2011-04-12 21:51:00 · 658 阅读 · 0 评论 -
v$session_longops
This view displays the status of various operations that run for longer than 6 seconds (in absolute time). These operations currently include many backup and recovery functions, statistics gathering,原创 2012-07-24 18:03:44 · 1890 阅读 · 0 评论 -
oracle Pipelined Table Functions 的使用 (包含split函数的示例)
在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。Oracle 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据转载 2012-07-19 18:09:09 · 1207 阅读 · 0 评论 -
视图合并(View Merging)
在使用视图或嵌套视图的查询语句中,oracle 为了取得最优的执行计划会将这些视图进行合并,将视图中的表与外部查询的表进行连接。--示例:SQL> select e.first_name, e.last_name, dept_locs_v.street_address, dept_locs_v.postal_code 2 from employees e, 3 (s原创 2012-07-29 00:37:18 · 8193 阅读 · 0 评论 -
简单介绍join,outer-join,semi-join,anti-join的区别
表连接的方式如join,semi-join,outer-join,anti-join;表连接的实现方式如nested loop,merge,hash.本文简单的介绍表连接的方式join,semi-join,outer-join,anti-join和适用情景。假设2个数据源(row source).Emp(id pk,ename,deptno) Dept(deptno pk,dname)如下是join select ename,dname from emp,dept where emp.d转载 2011-05-04 20:37:00 · 1054 阅读 · 0 评论 -
oracle in与exists疑惑
对于oracle10,in与exists实际上没有什么区别了,oracle会进行查询转换。下面是在itpub上发的贴子和自己的认证,但是对于not in与not exists是经常有区别的oracle in与exists疑惑 http://www.itpub.net/thread原创 2011-07-11 16:29:15 · 1172 阅读 · 1 评论 -
oracle 全文检索
使用 like '% %',oracle会进行全表扫描,相当耗费系统资源,这可以使用oracle的全文检索来提高查询速度。SQL> select * from v$version where rownum = 1;BANNER----------------------原创 2011-07-12 23:35:21 · 1372 阅读 · 0 评论 -
oracle 删除指定字段重复的记录
--获取有重复记录的数据,并且其id最小的记录--哪些字段相同,以哪些字段分组,然后获取其最小的idselect min(id) id,name,score from t group by name,score having count(*) > 1;--删除那些name原创 2011-07-13 22:25:28 · 5167 阅读 · 0 评论 -
复合索引设计建议
复合索引设计建议1)分析sql语句约束条件字段2)如果约束条件字段比较固定,则优先考虑创建针对多个字段的普通B*树复合索引。3)如果单个字段是主键或唯一字段,或者可选性非常高,尽管约束条件字段比较固定,也不一定要建成复合索引,可建成单字段索引,降低复合索引开销。4)首先切记复合索引的前缀性。5)其次考虑复合索引的可选性或基数。即按可选性高低,进行复合索引字段的排序。6)如果原创 2011-11-15 23:15:10 · 922 阅读 · 0 评论 -
验证索引列NULL不走索引
今天遇到问题,同事问我,order by 主键列 desc 与order by 日期列(加了索引) desc ,怎么执行时间差距这么大;于是查看执行计划不一样:order by 主键列 desc 对应 INDEX FULL SCAN DESCENDING order by 日期列(加了索引) desc 对应 TABLE ACCESS FUL我加hint /*+ index(table原创 2011-10-26 21:46:49 · 3348 阅读 · 0 评论 -
11g对Nested Loop Joins做的改动
最近看网友sql调优时,发现Nested Loop Joins 的执行计划和原来的不一样了,不明白是咋回事,查看了11g的doc才知道,11g对Nested Loop Joins做了改动。粘一下:11.3.3.1 Original and New Implementation for Nested Loop JoinsOracle Database 11g introduces a n原创 2011-11-04 21:15:51 · 1591 阅读 · 2 评论 -
Oracle SQL 优化(一点一点来)
SQL Tuning(10g)1. 使用AND和=来构造谓语为了提高SQL的执行效率,在任何可能的时候使用等值连接2.避免改变WHERE子句中的列 在索引列上使用表达式(包括函数),将会导致优化器忽略该列上的索引,除非该列上定义的为基于函数的索引,所以应该将函数写在相对的位置上 e.empno为数值索引列select * from原创 2011-03-09 21:09:00 · 548 阅读 · 0 评论 -
WITH AS 测试
WITH AS 子句定义SQL语句级的临时表、该临时表仅对本次执行的SQL有效。SQL> select count(*) from t3 where table_name='test' and tablespace_name='tbs1'; COUNT(*)---------- 299999SQL> select count(*) from t3 where table_n原创 2011-11-12 20:17:51 · 1053 阅读 · 0 评论 -
高水位线
当表随着数据的增加,会使用越来越多的块,HWM会升高,当删除一些数据后,可能会产生很多空块(不包含数据的块),但它们仍在HWM之下。为了降低高水位线,有必要对表进行重组 (reorganization):ALTER TABLE T ENABLE ROW MOVEMENT;ALTER TABLE T SHRINK SPACE;CREATE TABLE t ( id NUMBER,原创 2011-06-05 21:14:00 · 1673 阅读 · 0 评论 -
CLUSTERING FACTOR
The clustering_factor is a single number that represents the degree to which data israndomly distributed through a table, and the concept of creating a number to represent thedata scatter in a tab原创 2011-04-26 22:34:00 · 579 阅读 · 0 评论 -
merge semi join and merge anti join
版本:10.2.0.4Semi join(也有叫半连接的)多在子查询in或者exists等中使用,对于外部行集,查找内部(即子查询)行集,匹配第一行之后就返回,不再往下查找例如:SQL> select b.* 2 from scott.dept b 3 where b.deptno in (select deptno from scott.emp a) 4 ; DEPTN转载 2011-05-04 23:12:00 · 782 阅读 · 0 评论 -
bind peeking
bind peekingoracle 在处理带有绑定变量的sql时,只会在硬解析的时候“窥探”一下sql中绑定变量的值,然后会根据窥探到的值来决定整个sql的执行计划。当以后该sql再次执行的时候,即使绑定变量的值发生了变化,oracle 也会使用该sql第一次执行(硬解析)时缓存在shared pool 中的执行计划。这可能会带来问题。SQL> select * from v原创 2012-02-02 18:51:12 · 1274 阅读 · 0 评论 -
oracle 对索引进行监控与分析
查看表索引信息需要用到dba_indexes, dba_ind_columns,查看表索引列信息,包括复合索引的脚本: WITH nonformat AS (SELECT i.index_name,i.table_name,t.column_name,t.column_position,i.uniqueness,t.table_owner FROM dba_原创 2011-06-27 22:35:00 · 1213 阅读 · 0 评论