企業名稱:重慶科祿德科技有限公司
聯系人:冷老師
手機:17754917523
郵箱:93865813@qq.com
網址:www.healthcareerhelp.com
地址:重慶石橋鋪高創錦業
MySQL培訓:ORACLE使用兩種方法來訪問表中的記錄
A.全表掃描意味著按順序訪問表中的每條記錄。ORACLE通過一次讀取多個數據塊來優化全表掃描。
B.您可以基于ROWID訪問該表,以提高訪問該表的效率。ROWID包含表中記錄的物理位置信息,ORACLE使用INDEX實現數據與存儲數據的物理位置的連接。通常,索引提供了一種快速訪問ROWID的方法,因此基于索引列的查詢可以提高它們的性能。
tiger:
認為使用索引比掃描整個表更有效是錯誤的。索引適用于訪問表中的少量記錄。如果您想訪問表上的大多數記錄,那么使用索引來代替是低效的。
如果T表有一個狀態字段,只有0和1兩個值,0對應較少的記錄,1對應大部分記錄,在狀態字段上創建一個索引,那么從T中選擇*其中狀態=0是高效的,而從T中選擇*其中狀態=1是低效的,這比全表掃描要差。
補充:如果是古代RBO,只要有指數就用,不管有沒有效率;雖然選擇性地使用CBO,但當狀態=0時選擇索引,當狀態=1時不選擇索引。這也是RBO被淘汰的原因之一。
3.共享SQL語句
為了不重復解析同一條SQL語句,ORACLE在第一次解析后將該SQL語句存儲在內存中。
SGA共享緩沖池(系統全局區)中的內存可以由所有數據庫用戶共享。
因此,當您執行一條SQL語句(有時稱為游標)時,如果它與之前執行的語句完全相同,ORACLE可以快速獲得解析后的語句和Z佳執行路徑。
ORACLE的這個功能大大提高了SQL的執行性能,節省了內存的使用。遺憾的是,ORACLE只為簡單表提供緩存緩沖,這個函數不適用于多表連接查詢。
數據庫管理員必須在init.ora中為這個區域設置合適的參數,當內存區域越大,可以保留的語句就越多,當然共享的可能性也就越大。
當您向ORACLE提交一條SQL語句時,ORACLE將首先在內存中查找相同的語句。
這里需要注意的是,ORACLE在兩者之間采用了嚴格的匹配。為了實現共享,SQL語句必須完全相同(包括空格、換行符等)。).
共享語句必須滿足三個條件:
A.字符級比較:當前執行的語句必須與共享池中的語句完全相同。例如:
從電磁脈沖中選擇*;
不同于以下各項
從電磁脈沖中選擇*;從Emp中選擇*;從電磁脈沖中選擇*;
B.兩個語句中引用的對象必須完全相同
C.兩個SQL語句中必須使用同名的綁定變量。例如,第一組中的兩條SQL語句是相同的(可以共享),而第二組中的兩條語句是不同的(即使不同的綁定變量在運行時被賦予相同的值)
a.
selectpin,人名,其中pin=: bl k1 . pin;
selectpin,人名,其中pin=: bl k1 . pin;
b.
selectpin,人名,其中pin=: bl k1 . ot _ ind;
selectpin,人名,其中pin=: bl k1 . ov _ ind;
tiger:
綜上所述,在OLTP業務中,為了共享SQL,減少硬解析時間和資源消耗,建議合理使用綁定變量。注意“合理”二字。并非所有變量都建議使用綁定變量。