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
- 之所以Oracle在 Branch block中只记录 索引键值的前缀,而不是所有值,是因为这样可以节约空间,从而能够存储更多的 索引条目
- 同时,我们也能理解了为什么 查询使用 like '%xxx' 这种方法不会走Btree 索引,因为Branch block 存储的是前缀.
表列少,很有可能索引比表大
INDEX UNIQUE SCAN 索引唯一扫描。单块读 只可能发生在unique index/primary key 等值查找
等待事件:db file sequential read 但是你几乎看不到,因为只读一条数据
HINT 无需指定,有索引会自动走INDEX UNIQUE SCAN
等待事件:db file sequential read 但是你几乎看不到,因为只读一条数据
HINT 无需指定,有索引会自动走INDEX UNIQUE SCAN
INDEX UNIQUE SCAN 需要多少个io? 索引高度,如果有回表+1,有行迁移+2
1 0