打印本文 打印本文 关闭窗口 关闭窗口
Oracle常見問題集(三)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6731  更新时间:2009/4/22 22:05:50  文章录入:mintao  责任编辑:mintao
如果資料庫的優化器模式設置爲選擇性(CHOOSE),那麽實際的優化器模式將和是否運行過analyze命令有關.

如果table已經被analyze, 優化器模式將自動成爲CBO , 反之,資料庫將採用RULE形式的優化器.

 

在缺省情況下,ORACLE採用CHOOSE優化器, 爲了避免那些不必要的全表掃描(full table scan) ,

你必須儘量避免使用CHOOSE優化器,而直接採用基於規則或者基於成本的優化器.

 

2. 訪問Table的方式

 

ORACLE 採用兩種訪問表中記錄的方式:

 

a. 全表掃描

全表掃描就是順序地訪問表中每條記錄. ORACLE採用一次讀入多個資料塊(database block)的方式優化全表掃描.

 

b. 通過ROWID訪問表

你可以採用基於ROWID的訪問方式情況,提高訪問表的效率, ,

ROWID包含了表中記錄的物理位置資訊..ORACLE採用索引(INDEX)實現了資料和存放資料的物理位置(ROWID)之間的聯繫.

通常索引提供了快速訪問ROWID的方法,因此那些基於索引列的查詢就可以得到性能上的提高.

 

3. 共用SQL語句

 

爲了不重復解析相同的SQL語句,在第一次解析之後, ORACLESQL語句存放在記憶體中.這塊位於系統全局區域SGA(system

global area)的共用池(shared buffer pool)中的記憶體可以被所有的資料庫用戶共用.

因此,當你執行一個SQL語句(有時被稱爲一個游標),如果它

和之前的執行過的語句完全相同, ORACLE就能很快獲得已經被解析的語句以及最好的

執行路徑. ORACLE的這個功能大大地提高了SQL的執行性能並節省了記憶體的使用.

可惜的是ORACLE只對簡單的表提供高速緩衝(cache buffering) ,這個功能並不適用於多表連接查詢.

資料庫管理員必須在init.ora中爲這個區域設置合適的參數,當這個記憶體區域越大,就可以保留更多的語句,當然被共用的可能性也就越大了.

當你向ORACLE 提交一個SQL語句,ORACLE會首先在這塊記憶體中查找相同的語句.

這裏需要注明的是,ORACLE對兩者採取的是一種嚴格匹配,要達成共用,SQL語句必須

完全相同(包括空格,換行等).

共用的語句必須滿足三個條件:

 

A. 字元級的比較:

當前被執行的語句和共用池中的語句必須完全相同.

例如:

SELECT * FROM EMP;

和下列每一個都不同

SELECT * from EMP;

Select * From Emp;

SELECT * FROM EMP;

B. 兩個語句所指的物件必須完全相同:

例如:

用戶 物件名 如何訪問

Jack sal_limit private synonym

Work_city public synonym

Plant_detail public synonym

 

Jill sal_limit private synonym

Work_city public synonym

Plant_detail table owner

 

考慮一下下列SQL語句能否在這兩個用戶之間共用.

SQL

能否共用

原因

select max(sal_cap) from sal_limit;

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口