2010 07 30 oracle如何讀取資料

2021-05-23 05:05:42 字數 1556 閱讀 2805

一,從邏輯層面來說

本節將討論oracle如何訪問資料,在物理層,oracle讀取資料的最小單位是乙個塊,oracle讀取資料的最大限制取決於作業系統和oracle對多塊讀io的限制。在

物理上來說,乙個sql語句要讀取某個記錄,必須將該記錄讀取到db cache中,然後才能從db cache中獲取,這種訪問我們一般稱為物理讀(read),如果這個資料已經存在於db cache中,那麼前台程序可以直接從db cache中讀取資料,這樣的讀取成為邏輯讀(get),如果要讀取的資料已經被修改,需要從undo中讀取前映像來獲取一致性的資料,那麼會從undo中取出前映像,和當前的資料塊一起形成乙個一致性讀塊(cr block),然後再從cr block中讀取資料,這種訪問方式稱為一致性讀(cr get)。

從邏輯上講,oracle讀取資料通過三種途徑:全表掃瞄(full table sacn,fts)、

索引掃瞄、通過rowid直接訪問。在閱讀sql執行計畫的時候,可以通過table access子句來檢視oracle訪問某個表的方法,一般來說,對於大型的表來說,如果出現table access full的提示,是需要加以重視的,一般情況下,對於大表的全表掃瞄應該是盡量避免的。下面是乙個簡單的執行計畫:

query plan

-----------------------------------------

select statement    [choose] cost=1234

table access full large [:q65001] [analyzed]

檢視sql

的執行計畫的時候,最右邊的,最上面的操作是首先被執行的,上面的例子只有乙個操作,就是對錶「

large

」進行全表掃瞄。當這個步驟執行完畢後,就會將結果集返回給上面一層的語句,上面的例子就是

select statement

這個語句,一般來說

select statement

是整個執行計畫的頂層。

[choose]

表明這個

sql語句的

optimizer_goal

,在這個提示的右側是

cost

資料,如果

cost

是有實際值的,那麼說明使用了

cbo優化器,如果

cost

沒有實際值,那麼說明使用了

rbo優化器。

比如:select statement    [choose] cost=

cost

只是乙個相對的值,只是優化器用來分析訪問路徑的優劣的,相同的

sql,

cost

越小的執行計畫,起執行效果越好,開銷越小。而不同的

sql,其

cost

值是沒有可比性的。

[:q65001]

指明這部分操作被採用並行查詢的方式執行,

[analyzed]

指出被訪問的物件是被分析過的。

二,物理讀是如何進行的。

乙個**可能存在多個segment中,也可能僅僅存在乙個segment的多個extent中,也可能僅僅是存在乙個extent的多個block中。

記一次sparksql讀取oracle資料優化過程

sparksql提供外接關係型資料庫的介面如下,def jdbc url string,table string,columnname string,lowerbound long,upperbound long,numpartitions int,connectionproperties prop...

oracle如何產生隨機數

oracle 如何產生乙個隨機數 dbms random 1 小數 0 1 select dbms random.value from dual 2 指定範圍內的小數 0 100 select dbms random.value 0,100 from dual 3 指定範圍內的整數 0 100 se...

如何增加Oracle連線數

oracle的連線數 sessions 與其引數檔案中的程序數 process 有關,它們的關係如下 sessions 1.1 process 5 但是我們增加process數時,往往資料庫不能啟動了。這因為我們還漏調了乙個unix系統引數 它是 etc system 中semmns,這是unix系...