对于Oracle来说,我是一个非常新的探索事物,阅读索引访问的方式,我得出一个结论,假设我有一个表emp。索引访问的概念
table emp
---------------------------
empno ename salary mgrid
---------------------------
1 ab 200 2
2 bn 900 3
3 bh 900 1
4 ah 890 4
5 kk 67 0
6 ac 9090
这该是多么的主键EMPNO唯一索引创建
index table(suppose)
--------------------
rowid index value
---------------------
xyzz 1
- 2
- 3
- 4
- 5
- 6
其中 ' - ' 号填列一些十六进制值,假设我写一个查询,
select * from emp where empno ='5'
那么它将取出的rowid对应的索引值5和读取该行对应于5 EMPNO从表emp
现在我的疑问是,在这里它是从index_table取,但要找到的rowid是也扫描整个表(index_table)到5,同样使用rowid来查找行,那么它与没有索引的表有什么不同呢?还有,我们正在扫描整个表直到5个empno。
唯一的好处是索引是按升序存储的。
我知道我错了,但有人可以解释这个
**Doubt**
执行全表扫描,扫描每行柱不论它过滤条件? 让我们接受上面使用的查询,如果该表emp上没有主键,那么它将执行全表扫描,然后对于empno = 5,它会扫描每一行empno值还是会扫描empname,薪水和mrgid也?
谢谢雷内的精彩解释,但你能否清除上面提到的问题中提到的另外一个疑问,我最近更新了 – 2012-03-06 16:56:05