日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
六分鐘學(xué)會Oracle全表掃描

Oracle經(jīng)過長時間的發(fā)展,很多用戶都很了解Oracle全表掃描了,這里我發(fā)表一下個人理解,和大家討論討論。優(yōu)化器在形成執(zhí)行計劃時需要做的一個重要選擇是如何從數(shù)據(jù)庫查詢出需要的數(shù)據(jù)。對于SQL語句存取的任何表中的任何行,可能存在許多存取路徑(存取方法),通過它們可以定位和查詢出需要的數(shù)據(jù)。優(yōu)化器選擇其中自認為是最優(yōu)化的路徑。

創(chuàng)新互聯(lián)公司長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鳳臺企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),鳳臺網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

在物理層,Oracle讀取數(shù)據(jù),一次讀取的最小單位為數(shù)據(jù)庫塊(由多個連續(xù)的操作系統(tǒng)塊組成),一次讀取的最大值由操作系統(tǒng)一次I/O的最大值與multiblock參數(shù)共同決定,所以即使只需要一行數(shù)據(jù),也是將該行所在的數(shù)據(jù)庫塊讀入內(nèi)存。邏輯上,Oracle用如下存取方法訪問數(shù)據(jù):

Oracle全表掃描(Full Table Scans, FTS)

為實現(xiàn)Oracle全表掃描,Oracle讀取表中所有的行,并檢查每一行是否滿足語句的WHERE限制條件。Oracle順序地讀取分配給表的每個數(shù)據(jù)塊,直到讀到表的最高水線處(high water mark, HWM,標識表的最后一個數(shù)據(jù)塊)。一個多塊讀操作可以使一次I/O能讀取多塊數(shù)據(jù)塊(db_block_multiblock_read_count參數(shù)設(shè)定),而不是只讀取一個數(shù)據(jù)塊,這極大的減少了I/O總次數(shù),提高了系統(tǒng)的吞吐量,所以利用多塊讀的方法可以十分高效地實現(xiàn)Oracle全表掃描,而且只有在Oracle全表掃描的情況下才能使用多塊讀操作。在這種訪問模式下,每個數(shù)據(jù)塊只被讀一次。由于HWM標識最后一塊被讀入的數(shù)據(jù),而delete操作不影響HWM值,所以一個表的所有數(shù)據(jù)被delete后,其Oracle全表掃描的時間不會有改善,一般我們需要使用truncate命令來使HWM值歸為0。幸運的是Oracle 10G后,可以人工收縮HWM的值。

由FTS模式讀入的數(shù)據(jù)被放到高速緩存的Least Recently Used (LRU)列表的尾部,這樣可以使其快速交換出內(nèi)存,從而不使內(nèi)存重要的數(shù)據(jù)被交換出內(nèi)存。

使用FTS的前提條件:在較大的表上不建議使用Oracle全表掃描,除非取出數(shù)據(jù)的比較多,超過總量的5% -- 10%,或你想使用并行查詢功能時。

使用Oracle全表掃描的例子:

 
 
 
  1. explain plan for select * from dual;  
  2. Query Plan  
  3. SELECT STATEMENT [CHOOSE] Cost=  
  4. TABLE ACCESS FULL DUAL 

行的ROWID指出了該行所在的數(shù)據(jù)文件、數(shù)據(jù)塊以及行在該塊中的位置,所以通過ROWID來存取數(shù)據(jù)可以快速定位到目標數(shù)據(jù)上,是Oracle存取單行數(shù)據(jù)的最快方法。

為了通過ROWID存取表,Oracle 首先要獲取被選擇行的ROWID,或者從語句的WHERE子句中得到,或者通過表的一個或多個索引的索引掃描得到。Oracle然后以得到的ROWID為依據(jù)定位每個被選擇的行。

這種存取方法不會用到多塊讀操作,一次I/O只能讀取一個數(shù)據(jù)塊。我們會經(jīng)常在執(zhí)行計劃中看到該存取方法,如通過索引查詢數(shù)據(jù)。

使用ROWID存取的方法:

 
 
 
  1. explain plan for select * from dept where rowid = 'AAAAyGAADAAAAATAAF';  
  2. Query Plan  
  3. SELECT STATEMENT [CHOOSE] Cost=1 
  4. TABLE ACCESS BY ROWID DEPT [ANALYZED] 

【編輯推薦】

  1. ORACLE執(zhí)行計劃的一些基本概念
  2. 利用Oracle執(zhí)行計劃機制提高查詢性能
  3. 簡單描述Oracle編碼SQL
  4. 代碼講解Oracle可選擇性
  5. Oracle管理工具Oracle SQL Handler功能一覽

新聞標題:六分鐘學(xué)會Oracle全表掃描
網(wǎng)站URL:http://m.5511xx.com/article/cdiosjj.html