Oracle之SQL优化章节
一个阳光努力的程序盐
要努力、要奋斗、但是不要被自己感动,没什么是不可能的,想做就可以做到
展开
-
Oracle之索引组织表
假设表A,有5个字段,其中有一个名为ID的字段为主键。日常业务中,经常需要根据ID字段的值,查找该表上其它字段(一个或多个字段,甚至全部字段)上的值。如果我们只在ID列上创建索引,当执行select id,字段2,字段3,...from 表Awhere id=(>,=,时,如果结果集是少数记录,那么极可能是通过ID列上的索引获取ROWID,然后回表去读取相应ROWID的行记录,以获原创 2017-10-27 00:06:37 · 736 阅读 · 0 评论 -
Oracle之执行计划index fullscan和index fast full scan区别
1、当select和where中出现的列都存在索引是发生index full scan与index fast full scan的前提 2、查询返回的数据行总数占据整个索引10%以上的比率 3、基于上述前提count(*)操作几乎总是选择index fast full scan,而索引列上的order by子句几乎总是选择index full scan 4、in原创 2017-10-22 22:32:43 · 4666 阅读 · 0 评论 -
Oracle之回表消失,不取无用列
drop table t purge;create table t as select * from dba_objects;create index idx_object_id on t(object_id,object_type);set linesize 1000set autotrace traceonlyselect object_id,object_type原创 2017-10-21 15:00:31 · 460 阅读 · 0 评论 -
Oracle之move操作导致索引失效
/* 结论:很多人想用ALTER TABLE MOVE的方式来降低高水平,结果经常忽略了这个操作会导致索引失效, 请大家通过下列的试验的回顾,以后多留意这点。 另外alter table t shrink space; 是否能十全十美呢,请看后面的案例分析*/ drop table t purge;create table t as select * from db原创 2017-10-23 00:11:34 · 1401 阅读 · 0 评论 -
Oracle index_desc索引之排序升降
/* 结论:索引能够消除排序,这是之前学过的内容,但是如果排序是部分升序部分降序,就必须建对应部分升降序的索引,否则无法用这个来消除排序。 比如order by col1 desc col2 asc,我们可以建(col1 desc,col2 asc)的索引。 值得一提的是,如果你的语句变成 order by col1 asc col2 desc,之前的原创 2017-10-23 01:39:45 · 10140 阅读 · 0 评论 -
Oracle之虚拟索引
DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以后才能看出效果,但是在实际工作中,特别是对大表创建索引对系统性能有很大影响,因此我们不得不避开业务高峰时段,但是有没有一种办法创建索引而不影响性能呢?有,虚拟索引。 虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的原创 2017-10-23 02:40:35 · 323 阅读 · 0 评论 -
Oracle之位图索引和多键索引区别
/*总结“本质圆滑音其实就是位图索引之间的与非运算非常高效!*/总结:位图索引适合男女、123等等,当存在位图索引时候,oracle会先去扫描位图索引列,然后依次向后进行扫描,然后会扫描前列。---做位图索引与即席查询试验前的准备drop table t purge;set autotrace offcreate table t (name_id, gend原创 2017-10-25 15:08:45 · 551 阅读 · 0 评论 -
Oracle之函数索引之各种列的函数转换
--测函数索引前准备drop table t purge;create table t as select * from dba_objects;create index idx_object_id on t(object_id);create index idx_object_name on t(object_name);create index idx_created on原创 2017-10-25 15:53:41 · 548 阅读 · 0 评论 -
Oracle之位图索引重复度低慎用
---测试位图索引重复度前准备工作drop table t purge;set autotrace offcreate table t as select * from dba_objects;insert into t select * from t;insert into t select * from t;insert into t select * from t;原创 2017-10-25 16:20:43 · 360 阅读 · 0 评论 -
Oracle索引妙用之部分记录
drop table t purge;set autotrace offcreate table t (id int ,status varchar2(2));--建立普通索引create index id_normal on t(status);insert into t select rownum ,'Y' from dual connect by rownuminse原创 2017-10-25 16:32:10 · 214 阅读 · 0 评论 -
Oracle之函数索引修改,重建索引
--函数索引陷阱 --自定义函数使用函数索引要注意函数代码改变后的影响。 drop table t purge;create table t ( x number, y varchar2(30)); set autotrace off insert into t SELECT rownum, rownum||'a' FROM dual connect by原创 2017-10-25 16:53:33 · 1300 阅读 · 0 评论 -
Oracle之利用函数索引减少递归调用
drop table t1 purge;drop table t2 purge;create table t1 (first_name varchar2(200),last_name varchar2(200),id number); create table t2 as select * from dba_objects where rown原创 2017-10-25 16:38:16 · 345 阅读 · 0 评论 -
Oracle之索引监控SQL2
1.不该建位图索引的列(求得之不重复数值所占总记录比例)set linesize 1000select t1.index_name, t1.table_name, t2.column_name, t2.column_position, t1.distinct_keys, t1.num_rows,原创 2017-10-25 20:47:52 · 221 阅读 · 0 评论 -
Oracle之三大连接的使用限制,nl、hash、merge
的萨达萨达多撒大所原创 2017-10-25 23:59:45 · 2527 阅读 · 0 评论 -
Oracle之三大表连接优化大全
1.nl连接,请用在局部扫描额场景nl第一步优化:驱动表限制条件有索引第二步:被驱动表的连接条件有索引第三步:确保小结果集先驱动2.hash连接:第一步:两表限制条件有索引第二步:小结果集驱动第三步:尽量保证PGA能容纳hash算法3.merge sort join连接:第一步:两表限制条件有索引第二步:连接条件索引消除排序(排序本身有序)原创 2017-10-26 00:17:48 · 1255 阅读 · 0 评论 -
Oracle之三大连接讲解
1.nl连接/* 结论: NL连接中,驱动表放回的数据条数,决定着被驱动表的访问次数*//* 结论: NL连接中,驱动表被访问0或者1次,被驱动表被访问0次或者N次,N由驱动表返回的结果集的条数来定)*/名字解释:E-Rows:预期返回数据数量,A-Rows:实际返回数据数量--环境构造--研究Nested Loops Join的表访问次数前准备工作原创 2017-10-26 10:02:08 · 671 阅读 · 0 评论 -
Oracle获取执行计划的6中方式,以及每种方式的优缺点
/* 总的结论: 一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了): 1. explain plan for获取; 2. set autotrace on ; 3. statistics_level=all; 4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取原创 2017-10-26 13:56:57 · 795 阅读 · 0 评论 -
Oracle之索引、位图索引、物化视图、缓存结果集等性能比拼
--最慢速度(无索引)drop table t purge;create table t as select * from dba_objects;alter table T modify OBJECT_NAME not null;select count(*) from t;set autotrace traceonlyset linesize 1000set ti原创 2017-11-06 00:50:28 · 877 阅读 · 0 评论 -
Oracle之组合查询和in有关的优化
解析:如果建立联合索引,但是where查询条件,只有第一个,或者第一个和第三个,索引将只走第一个查询条件,第二个等其他索引字段就会失效。机制:第一个字段进行筛选,然后第二个字段进行筛选。drop table t purge;create table t as select * from dba_objects;UPDATE t SET OBJECT_ID=20 WHERE原创 2017-10-22 21:00:15 · 3874 阅读 · 0 评论 -
Oracle之关于outline (锁定执行计划)
一、基本概述Oracle Outline,中文也称为存储大纲,是最早的基于提示来控制SQL执行计划的机制,也是9i以及之前版本唯一可以用来稳定和控制SQL执行计划的工具。outline是一个hints(提示)的集合,更具体的讲,outline可以锁定一个给定SQL的执行计划,保持其执行计划稳定,不管数据库环境如何变更(如统计信息,部分参数等)注意:从10g以原创 2017-10-27 00:22:43 · 1662 阅读 · 1 评论 -
Oracle之一键获取数据库总体情况 awr等报表
SET markup html ON spool ON pre off entmap offset term offset heading onset verify offset feedback offset linesize 2000set pagesize 30000set long 999999999set longchunksize 999原创 2017-10-27 18:48:51 · 324 阅读 · 0 评论 -
Oracle之获取SQL对应表的信息
SET LINESIZE 666set pagesize 5000column index_name format a30column table_name format a26column num_rows format 999999999column index_type format a24column num_rows format 999999999colum原创 2017-10-27 22:01:11 · 226 阅读 · 0 评论 -
Oracle之查询对应索引的情况
SET LINESIZE 666set pagesize 5000column index_name format a30column table_name format a26column num_rows format 999999999column index_type format a24column num_rows format 999999999colum原创 2017-10-27 22:01:55 · 1565 阅读 · 0 评论 -
SQL优化:表的连接顺序
drop table tab_big;drop table tab_small;create table tab_big as select * from dba_objects where rownumcreate table tab_small as select * from dba_objects where rownumset autotrace traceonly原创 2017-10-20 19:20:12 · 2109 阅读 · 0 评论 -
Oracle之 【RANDOM】使用dbms_random.string产生随机字符串的用法及应用
1.dbms_random.string用法Oracle官方文档参考链接:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_random.htm#i996825用法是DBMS_RANDOM.STRING(选项, 返回字符串长度)选项有如下几种可供选择:1)'u', 'U' - returning原创 2017-10-21 12:07:26 · 2301 阅读 · 0 评论 -
Oracle之索引和插入的优化案例
drop table t purge;create table t as select * from dba_objects;insert into t select * from t;insert into t select * from t;commit;--请从这里开始注意累加的时间(从建索引到插入记录完毕)set timing on create index i原创 2017-10-21 16:19:06 · 602 阅读 · 0 评论 -
Oracle之表压缩和索引压缩
解析:压缩后的表更新的开销会更大,查询耗费的CPU也更多。所以压缩表一般适合在更新比较少,且CPU消耗不大,IO消耗很大系统中试用。根据查询首先会看出block减少,然后 根据自行计划查看即可。表压缩:---压缩表可减少数据量,从而减少IODROP TABLE t purge;CREATE TABLE t NOCOMPRESS ASSELECT rownum原创 2017-10-22 00:11:08 · 2984 阅读 · 0 评论 -
Oracle之索引改造成主键
解析:主键就是索引里面加一个约束drop table t_p cascade constraints purge;CREATE TABLE t_p(order_id NUMBER(3), item_id NUMBER(2), comments varchar2(400));CREATE INDEX ord_itm_idx ON t_p(order_id,item_i原创 2017-10-22 00:02:36 · 1233 阅读 · 0 评论 -
Oracle之索引三大特征
索引黄金三大特征:1.索引的高度较低索引高度较低的学习:随着数据的不断增多,从底层的block块开始,如果存储满了会向上保存目录,但是向上增长缓慢,查询数据的以后从最上级开始向下查询,一层一个io,大量数据主要在吞吐量缓慢。测试:可以建立表插入数据,然后建立索引,然后用hitns进行全表扫描,查看执行计划看consistent gets数量。例子:drop table t1原创 2017-10-22 12:04:35 · 523 阅读 · 0 评论 -
Oracle之聚合因子
聚合因子:因为索引有顺序,表的数据也有顺序,假如表的数据顺序和索引的顺序非常不匹配,就会产生大量的聚合因子,非常影响性能。--colocated表根据x列有一定的物理顺序 drop table colocated purge;create table colocated ( x int, y varchar2(80) );begin for i in 1 ..原创 2017-10-22 16:11:29 · 1001 阅读 · 0 评论