Oracle數據庫的優化

    時間:2024-08-11 00:38:13 計算機畢業論文 我要投稿

    Oracle數據庫的優化

    摘要 本文提出了一種優化Oracle數據庫的方法。Oracle中SQL語句的執行過程可分為解析(Parse)、執行(Execute)和提取結果(Fetch)三步,此方法就是通過對SQL語句在Oracle數據庫中優化執行的三個過程來提高Oracle數據庫的性能。


    關鍵詞 數據庫 掃描 多表聯結 子查詢

    1 如何優化Parse
    1. 1 SQL語句的Parse處理步驟:
    1) 計算語句值
    2) 共享池中有無與此語句值相同的語句?
    3) 共享池中有與此語句字符完全匹配的語句?
    4) 準備要運行的SQL語句
    5) 為新語句在共享池中創建空間
    6) 將語句存放在共享池中
    7) 修改共享池圖,標明語句的值和在共享池中的位置
    8) 執行準備好的SQL語句
    最理想的是,語句只執行1、2、3和8步來進行處理。不經過2、3步來測試被傳給Oracle的語句要使用1~8步進行處理。只經過1、2、3、8的SQL語句要比經過1~8步的語句更為有效。
    1.2 在共享池中重用SQL語句
    當SQL語句被傳遞給Oracle處理時,其秘訣是重復使用已經在共享池中的語句,而不是讓Oracle在接受語句時去準備新的語句。前面表明,如果Oracle接受了一個與共享池中的語句相一致的語句,就重用共享池中的語句。
    Oracle提供在數據庫中存儲代碼的能力。當應用系統開始運行時,從數據庫中讀取代碼(可用PL/SQL語句編制)并像其它語句那樣傳遞到共享池中去處理。從數據庫中取出的代碼是編譯過的并駐留在共享池中。
    可以利用數據庫中存儲的程序代碼設計應用系統,檢查所有的事務處理以及主要的通用的過程,研究現有的應用系統并把主要的處理程序轉換為數據庫中存儲的程序代碼。在Oracle中存儲代碼可以通過過程、程序包、函數、觸發器等來實現。
    2 如何優化Execute和Fetch
    2.1 避免無計劃的全表掃描
    全表掃描連續從表讀取所有數據,而不管數據是否與查詢有關。避免不必要的全表掃描有兩個充足理由:1)全表掃描沒有選擇性
    2) 過全表掃描讀取的數據很快從SGA的緩沖區移走(如果正在掃描的表不是“高速存儲”的表)
    在基于規則優化的情況下,如果下列任何條件在SGA語句出現,就要對一個表進行全表掃描。
    1) 該表無索引
    2) 對返回的行無任何限定條件(如無Where語句)
    3) 對數據表與任何索引主列相對應的行無限定條件。例如,在City-State-Zip列上創建了三列復合索引,那么僅對State列有限定條件的查詢不能使用這個索引,因為State不是索引的主列。
    4) 對索引主列的行有限定條件,但條件或者是NULL或者是不相等。例如,City列上存在索引,在所有下列情況下都不會使用索引。
    Where city is null
    Where city is not null
    Where city!=’liaoning’
    5) 對索引主列的行有限定條件,但條件在表達式里使用。例如,如果在City列上索引,那么限定條件
    Where City=’liaoning’
    可以使用索引。然而,如果限定條件是
    Where UPPER(City)=’liaoning’
    那么不會使用City列上的索引,因為City列在UPPER函數里。如果將City列與文本字符串聯結在一起,也不會使用索引。例如,如果限定條件是
    Where City||’x’ like ‘liaoning%’
    那么不會使用City列上的索引。
    6) 對索引主列的行有限定條件,但條件使用Like操作以及值以‘%’開始或者值是一個賦值變量。例如,在所有下列情況下都不會使用索引:
    Where City like ‘%aonin%’
    Where City like :City_Bind_Variable
    如果表小、索引列無選擇性,基于開銷的優化器可能決定使用全表掃描。
    2.2只使用選擇性索引
    索引的選擇性是指索引列里不同值的數目與表中記錄數的比。如果表有1000個記錄,表索引列有950個不同值,那么這個索引的選擇性就是950/1000或者0.95。最好的可能性選擇是1.0。依據非空值列的唯一索引,通常其選擇性為1.0。
    如果使用基于開銷的最優化,優化器不應該使用選擇性不好的索引。
    索引的選擇性是指索引列里不同值的數目與表中記錄數的比。如果表有1000個記錄,表索引列有950個不同值,那么這個索引的選擇性就是950/1000或者0.95。最好的可能性選擇是1.0。依據非空值列的唯一索引,通常其選擇性為1.0。
    索引的選擇性是指索引列里不同值的數目與表中記錄數的比。如果表有1000個記錄,表索引列有950個不同值,那么這個索引的選擇性就是950/1000或者0.95。最好的可能性選擇是1.0。依據非空值列的唯一索引,通常其選擇性為1.0。
    2.3管理多表聯結
    Oracle提供了3個聯結操作:NESTED LOOPS、HASH JOIN和MERGE JOIN。MERGE JOIN是一組操作,在所有行被處理完之前,它不返任何記錄給下一操作。NESTED LOOPS和HASH是行操作,因此會很快將第一批記錄返回給下一個操作。
    在每個聯結選項里,必須執行一些步驟以獲取最好的聯結性能。如果沒有適當地優化聯結操作,那么聯結所需的時間也許隨著表的增長而呈指數級地增長。
    2.4管理包含視圖的SQL語句
    如果查詢包含視圖,優化器有兩種執行查詢的方法:首先解決視圖然后執行查詢,或者把視圖文本集成到查詢里去。如果首先執行視圖,那么首先完成全部的結果集,然后用其余的查詢條件做過濾器。
    首先解決視圖會導致查詢性能下降的問題,這取決于所涉及表的相對大小。如果視圖被集成到查詢里,那么查詢的條件也可以應用于視圖里,并且可以使用一個小一些的結果集。然而在一些情況下,也許可以通過視圖分離組操作提高查詢性能。
    如果一個視圖包含集合的操作(如Group by、SUM、COUNT或者DISTINCT),那么視圖不能被集成到查詢里去。
    不使用組或者沒有集合操作的視圖的SQL語法可以被集成到大的查詢里去。
    2.5優化子查詢
    當使用自查詢時,也許會碰到幾個獨特的問題。涉及子查詢的查詢潛在問題如

    【Oracle數據庫的優化】相關文章:

    大型ORACLE數據庫優化設計方案03-21

    基于Oracle數據庫的邏輯數據同步技術在實踐中的應用研究03-10

    主流空間數據庫引擎技術分析和優化方法研究03-12

    Oracle觸發器在MIS 開發中的應用03-18

    ORACLE RAC集群在電力營銷系統中的應用03-18

    應用Oracle數據庫監控維護技術,維護數據庫安全03-03

    論資本結構優化目標與資本結構優化03-01

    Oracle Portal及其門戶網站開發概述03-18

    優化課堂結構03-19

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      亚洲成Av人片乱码色午夜在线 | 伊人久久大香线蕉综合色狠狠 | 午夜国产理论片中文飘花 | 孕妇动漫精品国产一区二区三区 | 精品国产门事件在线观看 | 亚洲欧美在线a免费线上看 一级国产精品免费观看 |