對於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