自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高手閑談Oracle索引掃描

數(shù)據(jù)庫(kù) Oracle
這里介紹即使通過(guò)Oracle索引掃描取出的數(shù)據(jù)比較多,效率還是很高的,因?yàn)檫@只會(huì)在索引中讀取。

Oracle還是比較常用的,于是我研究了一下Oracle索引掃描,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。我們先通過(guò)index查找到數(shù)據(jù)對(duì)應(yīng)的rowid值(對(duì)于非***索引可能返回多個(gè)rowid值),然后根據(jù)rowid直接從表中得到具體的數(shù)據(jù),這種查找方式稱(chēng)為Oracle索引掃描或索引查找(index lookup)。一個(gè)rowid***的表示一行數(shù)據(jù),該行對(duì)應(yīng)的數(shù)據(jù)塊是通過(guò)一次i/o得到的,在此情況下該次i/o只會(huì)讀取一個(gè)數(shù)據(jù)庫(kù)塊。

在索引中,除了存儲(chǔ)每個(gè)索引的值外,索引還存儲(chǔ)具有此值的行對(duì)應(yīng)的ROWID值。Oracle索引掃描可以由2步組成:
(1) 掃描索引得到對(duì)應(yīng)的rowid值。
(2) 通過(guò)找到的rowid從表中讀出具體的數(shù)據(jù)。

每步都是單獨(dú)的一次I/O,但是對(duì)于索引,由于經(jīng)常使用,絕大多數(shù)都已經(jīng)CACHE到內(nèi)存中,所以第1步的I /O經(jīng)常是邏輯I/O,即數(shù)據(jù)可以從內(nèi)存中得到。但是對(duì)于第2步來(lái)說(shuō),如果表比較大,則其數(shù)據(jù)不可能全在內(nèi)存中,所以其I/O很有可能是物理I/O,這是一個(gè)機(jī)械操作,相對(duì)邏輯I/O來(lái)說(shuō),是極其費(fèi)時(shí)間的。所以如果多大表進(jìn)行索引掃描,取出的數(shù)據(jù)如果大于總量的5% -- 10%,使用索引掃描會(huì)效率下降很多。

如下列所示:

  1. SQL> explain plan for select empno, ename from emp where empno=10;  
  2. Query Plan  
  3. SELECT STATEMENT [CHOOSE] Cost=1 
  4. TABLE ACCESS BY ROWID EMP [ANALYZED]  
  5. INDEX UNIQUE SCAN EMP_I1 

注意TABLE ACCESS BY ROWID EMP部分,這表明這不是通過(guò)FTS存取路徑訪問(wèn)數(shù)據(jù),而是通過(guò)rowid lookup存取路徑訪問(wèn)數(shù)據(jù)的。在此例中,所需要的rowid是由于在索引查找empno列的值得到的,這種方式是INDEX UNIQUE SCAN查找,后面給予介紹,EMP_I1為使用的進(jìn)行索引查找的索引名字。

但是如果查詢(xún)的數(shù)據(jù)能全在索引中找到,就可以避免進(jìn)行第2步操作,避免了不必要的I/O,此時(shí)即使通過(guò)Oracle索引掃描取出的數(shù)據(jù)比較多,效率還是很高的,因?yàn)檫@只會(huì)在索引中讀取。所以上面我在介紹基于規(guī)則的優(yōu)化器時(shí),使用了select count(id) from SWD_BILLDETAIL where cn <'6',而沒(méi)有使用select count(cn) from SWD_BILLDETAIL where cn <'6'。因?yàn)樵趯?shí)際情況中,只查詢(xún)被索引列的值的情況極為少,所以,如果我在查詢(xún)中使用count(cn),則不具有代表性。

  1. SQL> explain plan for select empno from emp where empno=10; -- 只查詢(xún)empno列值  
  2. Query Plan  
  3. SELECT STATEMENT [CHOOSE] Cost=1 
  4. INDEX UNIQUE SCAN EMP_I1 

進(jìn)一步講,如果sql語(yǔ)句中對(duì)索引列進(jìn)行排序,因?yàn)樗饕呀?jīng)預(yù)先排序好了,所以在執(zhí)行計(jì)劃中不需要再對(duì)索引列進(jìn)行排序

  1. SQL> explain plan for select empno, ename from emp  
  2. where empno > 7876 order by empno;  
  3. Query Plan  
  4. SELECT STATEMENT [CHOOSE] Cost=1 
  5. TABLE ACCESS BY ROWID EMP [ANALYZED]  
  6. INDEX RANGE SCAN EMP_I1 [ANALYZED] 

從這個(gè)例子中可以看到:因?yàn)樗饕且呀?jīng)排序了的,所以將按照索引的順序查詢(xún)出符合條件的行,因此避免了進(jìn)一步排序操作。

【編輯推薦】

  1. 代碼講解Oracle可選擇性
  2. Oracle管理工具Oracle SQL Handler功能一覽
  3. 美國(guó)司法部公開(kāi)支持Oracle收購(gòu)Sun
  4. 閑談Oracle執(zhí)行計(jì)劃的步驟順序
  5. 六分鐘學(xué)會(huì)Oracle全表掃描
責(zé)任編輯:佚名 來(lái)源: cnbeta
相關(guān)推薦

2009-11-16 17:33:21

重做Oracle日志文

2009-04-10 14:38:17

Oracle高手位圖索引

2010-04-08 10:57:04

Oracle編程

2009-11-11 09:40:53

Oracle索引掃描

2010-11-15 15:20:13

Oracle索引掃描

2009-11-10 16:00:05

Oracle執(zhí)行計(jì)劃

2010-04-07 10:02:31

2011-07-19 13:08:10

2009-11-17 10:20:01

Oracle Spat

2009-11-17 15:59:25

Oracle物化視圖

2010-04-14 16:22:42

Oracle 9i

2009-10-29 16:57:05

Oracle傳輸表空間

2010-04-14 16:45:29

Oracle 9i全索

2010-04-15 16:16:57

Oracle數(shù)據(jù)庫(kù)應(yīng)用

2009-11-02 18:56:49

調(diào)整Oracle數(shù)據(jù)庫(kù)

2009-11-17 13:49:46

Oracle prim

2010-10-26 17:34:03

Oracle索引

2011-03-11 16:32:33

2009-11-12 12:42:35

Visual Stud

2010-03-17 14:26:40

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)