9

来源:互联网 发布:lvs调度算法 编辑:程序博客网 时间:2024/04/29 11:46

select * from test where rowid>='xxxxx'

这个sql多快读


TABLE ACCESS BY INDEX ROWID   才是回表


oralce 怎么实现并行, 通过rowid,extent 来实现的


select /*+ parallel(6) */ * from test;  开6个并行,一共7个进程,6个进程 扫描 1个进程 汇总  怎么保证不去扫描重复数据呢,让6个进程各自扫描独立的extent。


 同一张表上只能一个并行?  no  应该是cpu_count * 2


分区表 数据 最好 均衡分布, 怎么建分区表,怎么做到分布均衡?


主题: 索引
            最常用的索引      btree ,bitmap  
     
    btree     
    b:balance 平衡    tree:树形。

      
    
      root里面 存储了 分支范围,+ 分支块的 地址 
      分支 记录的 是 叶子的 范围 + 叶子 物理地址
      叶子块,key+原表的ROWID + 2个 dba 指针        dba = data block address 

  1. 之所以Oracle在 Branch block中只记录 索引键值的前缀,而不是所有值,是因为这样可以节约空间,从而能够存储更多的 索引条目  
  2. 同时,我们也能理解了为什么 查询使用 like '%xxx' 这种方法不会走Btree 索引,因为Branch block 存储的是前缀.  

    
    表列少,很有可能索引比表大

   INDEX UNIQUE SCAN 索引唯一扫描。单块读 只可能发生在unique index/primary key 等值查找
                     等待事件:db file sequential read 但是你几乎看不到,因为只读一条数据
                     HINT 无需指定,有索引会自动走INDEX UNIQUE SCAN 

 
INDEX UNIQUE SCAN  需要多少个io?  索引高度,如果有回表+1,有行迁移+2


1 0
原创粉丝点击