索引关键字的隐式转换分析
从等待事件找到具体session的sql语句进行调控:看eygle深入浅出中关于最后sql性能诊断部分,其中提到的几个案例,对于大表缺少必要索引而导致全表扫描影响性能;大表相应字段存在索引但是oracle并不走索引,关键字中如果存在转换,很可能oracle会使索引失效(选择hint都会失效)而选择全表扫描。对于大表缺少索引根据v$session和v$session_wait视图找到sid的等待事件,如果对于大表全表扫描user I/O等待事件db file scattered需要过多关注通过v$sqltext的hash_value和address和v$session的sql_hash_value和sql_address找到sql语句,然后对
local 索引和global 索引记载
最近发觉自己有个一直很不好的习惯,上pub 看问题碰见自己不会的总是避开,而且喜欢逃避问题,虽然自己现在还没有碰见,但是不代表以后不会遇见。而且有些问题其实并不是去寻求绝对的对错,在思考的过程中真的要养成自己会思考,会用实际的测试来验证某个结论,会把以前的不懂联合起来,然后慢慢地把以前的知识也有更深的理解,成为一个会学习的学习者!全局索引和本地索引:全局索引以整个表的数据为对象创建索引,其实也就是脱离了表分区键值,只考虑索引键值,索引中的索引条目可能有相同的键值但是来自不同的分区。 创建一张分区表Cre
clustering factor索引聚簇因子和执行计划
今天在pub上看见网友提到了关于索引的顺序读,谈谈个人自己对索引的理解吧!走索引(这里的索引不包括全索引扫描和全索引快速扫描)和全表扫描一直是我们这些初学者对cbo执行计划的迷糊地方,何时走索引,为什么不走索引,群里的朋友经常问到这些问题,其实自己之前的blog也多多少少提到了索引的一些知识点,自己多索引的理解也是从最开始只知道索引效率高到现在慢慢知道clustering factor,结构,存储数据的原理,如何查找数据。简要摘要一下clustering factor的理解。Clutering factor索引聚簇因子,也就是表中row存储的顺序,clusterin
跳跃索引测试
oracle 9I推出了跳跃索引index skip scan。刚好测试还算成功,一下都是针对oracle 10g的b+树索引T表的结构有两列x和y列,都是number类型X Y其中t表有41w数据,其中x有1和2两种取值,x=1的值有40w,x=2的值有1w,y则侯选值比较多,没有null列。创建联合索引Create index index_t on t(x,y)由于创建索引后oracle会自动执行分析索引,但是此时我们还需要对表做一个分析不然cbo的执行计划很有可能不准。调用dbms_stats系统包(oracle 8I后推荐使用dbms_stats收集统计信息,来代替使用analyze table t compute statistics, 不过这其中缘由暂时还
关于索引的执行计划记载
对于sql我们经常看见执行计划,刚好接触了资料自己就忍不住整理了一下。1 全表扫描 full table scans FTS全表扫描oracle需要读取表中所有行,然后检索合格条件的数据,而一次I/O读取数据块的多少则是由参数db_block_multiblock_read_count参数设定的,而不是只读取一个数据块,这极大的减少I/O总次数,提高系统吞吐量,一般全表扫描才使用多块读操作。当然大表的全表扫描是很消耗资源的,除非取出数据比较多,大概超过数据的总量的5%-10%,或者使用并行查询。(其中在cbo优化器下 索引利用与否oracle可以更好的判断,而经常能做的是索引长时
创建索引选项记载
索引可以说是oracle中比较重要但是又不容易彻底掌握的知识点。对于我们创建索引可能更多的就是一个很简单的语句create index index_name on table(id) tablespace index_tbs最近才了解到在创建索引时可以指定可选项让索引的创建适合业务的具体环境。1 NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值create index index_name on table(id) nosorttablespace index_tbs其实默认情况下,表中创建索引会对表中记录排序成功后再创建索引,其实索引的结构也可以更好的证明这点。如果记录比较多,肯定
b+ and bitmap index
索引是优化查询的一个很重要但是又很复杂的技术手段。有时候提到查询更多的网友都是create 索引,但是索引的创建和sql优化器以及具体业务情况都是很有关系的。以及具体索引的类别,具体是b+树索引还是bitmap索引。创建一个默认b+树单列索引Create index index_test01 on test01(id);Create默认的b+树基于函数的索引Create index index_fun_test05 on test05(substr(id,1,1) 创建一个基于函数的索引,在9.2.0.3之前query_rewrite_enabled参数必须为true,基于函数的索引才能生效,后续版本中基于函数的索引跟此参数已经无关,其中基于函数的
唯一索引和“隐藏”约束
创建unique index还会隐藏的创建约束条件吗,create table inf_stat_test as select no,org_id from inf_statcreate unique index inf_stat_index on inf_stat_test(no)此时inf_stat_test没有inf_stat_index这项约束,而且没有任何关于主键和唯一键的约束。select * from dba_constraints where constraint_name='INF_STAT_INDE没有任何数据行,oracle数据字典视图认为不存在此项约束。'insert into inf_stat_test values('asdf','sdfg')但是当我连续插入两次同样的no值后,oracle居然违反唯一约束inf_stat_index。但是查看dba_constraints