导航

培训第一天

Posted on 2016-07-18 21:06  endingzero  阅读(173)  评论(0)    收藏  举报

第一章:基础篇

第二章:ORACLE数据库高质量SQL开发与优化

  • 单一索引 
  1. 索引是什么?答:使用索引可以快速访问数据库中的特定数据。
  2. 使用索引一定使查询更快吗?答:不一定,如果索引的数据很大,有时候更加慢。
  3. 从服务器上创建表格到本地 create table s1 as select * from s;
  4. 在表格上建立索引create index IDX_S1_N1 on S1(s#);--建索引  
  5. 查询到真正的表地址时:要用到ROWID,例如:SELECT ROWID,S1.* FROM S1;

     

  6. 数据太大有时候不走索引

    CREATE TABLE TT AS SELECT * FROM DBA_OBJECTS;
    CREATE INDEX IDX_TT_OWNER ON TT(OWNER);
    SELECT * FROM TT WHERE OWNER ='NORTHWIND';
    SELECT * FROM TT WHERE OWNER='SYS';     

   执行计划分别是(F5):

  NORTHWIND的是这样:

  

  SYS的是这样:

  

  那是Oracle认为走全局扫描会更快。

  如果非要用索引在进行检索,可以变成 SELECT /*+ INDEX(TT IDX_TT_OWNER)*/ *FROM TT WHERE OWNER='SYS'

  

  • 复合索引
  1. 创建索引create index idx_tt_owner_2 on tt(owner,object_name);                              
  2. SELECT * FROM TT WHERE OWNER ='NORTHWIND' and OBJECT_NAME = '1'则走索引2
  3. SELECT * FROM TT WHERE OWNER ='NORTHWIND' 走索引1
  4. SELECT * FROM TT WHERE OBJECT_NAME = '1'不走索引  走全局扫描

 

  • B树索引内部结构 
    B树索引是一个典型的树结构,其包含的组件主要是:
    1) 叶子节点(Leaf node):数据行的键值(key value)、键值对应数据行的 ROWID。
    2) 分支节点(Branch node):最小的键值前缀(minimum key prefix),用于在(本块的)两个键值之间做出分支选择,指向包含所查找键值的子块(child block)的指针()所有的 键值-ROWID 对(key and ROWID pair)都与其左右的兄弟节点(sibling)向链接(link),并按照(key,ROWID)的顺序排序
    3) 根节点(Root node):一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。

    可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。

    对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)都具有两个字段。第一个字段表示当前该分支节点块下面所链接的索引块中所包含的最小键值;第二个字段为四个字节,表示所链接的索引块的地址,该地址指向下面一个索引块。在一个分支节点块中所能容纳的记录行数由数据块大小以及索引键值的长度决定。比如从上图一可以看到,对于根节点块来说,包含三条记录,分别为(0 B1)、(500 B2)、(1000 B3),它们指向三个分支节点块。其中的0、500和1000分别表示这三个分支节点块所链接的键值的最小值。而B1、B2和B3则表示所指向的三个分支节点块的地址。
    对于叶子节点块来说,其所包含的索引条目与分支节点一样,都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)也具有两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引来说则是多个值组合在一起的。第二个字段表示键值所对应的记录行的ROWID,该ROWID是记录行在表里的物理地址。如果索引是创建在非分区表上或者索引是分区表上的本地索引的话,则该ROWID占用6个字节;如果索引是创建在分区表上的全局索引的话,则该ROWID占用10个字节。

  •  Btree索引管理机制

   插入的数据最大时候,会新增一个叶子节点,存在新的索引数据。当数据不是最大的时候,会分裂该叶子节点,并把一般数据移到新几点,再插入该行记录,这样就会产生碎          片,这也是碎片产生的原因。

      索引的统计分析:analyze index idx_tt_owner validate structure;

  analyze index idx_tt_owner_2 validate structure;

  select t.name,

  t.height,

  t.if_blks,

  t.if_rows,

  t.br_rows,

  t.br_blks,

  t.del_if_rows,

  (t.del_if_rows/t.if_rows)*100 ratio from index_stats t where LOWER(t.name) IN ('idx_tt_owner','idx_tt_owner_2');

  • 监控索引使用率                                                                                                                                                                                                    alter index_idx_tt_owner monitoring usage;                                                                                                                                                         select x.*,sysdate from v$object_usagex;                                                                                                                                                           select * from tt where object_name='I_VIEWCON1';                                                                                                                                            alter index idx_tt_owner nimonitoring usage;
  • 位图索引的创建  create bitmap index bitmap_tt on tt(owner);(大型并发的OLTP系统慎用bitmap)!                                                                                                                                                                                                                                                                                                        第三章 设置高校的数据库对象:
  1. 第一范式:数据库中的每一列都是不可分割院子数据项,
  2. 第二范式:实体的属性完全依赖于这主0,例如:S表和C表非要弄成一个表的话,但是如果以学号为关键字的话,C表中的属性就不依赖于关键字。
  3. 第三范式:属性不依赖与其他非主属性。                                                                                                                                                                  例如:将工号、姓名、工种、车间、车间主任、日期、定额、超额设计成符合第三范式的数据库,可以这样设计                                                                           表1:工号(主键)、姓名、工种、车间                                                                                                                                                                   表2:车间(主键)车间主任                                                                                                                                                                                 表3:(工号、日期)主键、定额、超额。