Oracle Optimizer:遷移到使用基于成本的優化器-----系列1.3
2024-08-29 13:49:01
供稿:網友
Oracle Optimizer:遷移到使用基于成本的優化器-----系列1.3
3.2.3 可用CBO模式
CBO有兩種運行模式:ALL_ROWS和FIRST_ROWS.
FIRST_ROWS的目標是盡可能最快的返回行.這種模式告訴優化器響應時間是最重要的。它偏好嵌套連接方式. FIRST_ROWS也以考慮成本為主要規則來處理行.通常規則是使用索引的計劃而不是使用全表掃描的計劃作為訪問路徑,ORDER BY子句導致索引訪問,等等
從9i版本起,在First提示中行的數量可以在參數中設置,FRIST_ROWS_N(N可以是1,10,100 或者1000),隨不同應用程序的需求而設置
ALL_ROWS在返回輸出結果以前,對給定的查詢處理所有的行。它迫使優化器考慮最少的資源占用和最佳的吞吐量. ALL_ROWS更喜歡排序合并操作
對于一個OLTP系統, FIRST_ROWS對于快速響應時間是一個理想的選項.
對于批處理方向的應用程序意味著使用ALL_ROWS.注重,以最快響應時間的返回第N行的計劃可能不是一個理想的計劃,假如系統需求獲得完整的結果.因此應根據應用程序的需要而決定.
當數據庫大小變化時CBO動態調整它的執行路徑,因此假如對于同一個應用程序同樣的查詢,一個數據庫設置中運行很好而在另外的數據庫中運行不良,你不必要理會.假如在兩個數據庫中設置和統計資料不同,這個將會發生..為了防止出現這種情況.得考慮使用優化器持久性.稍后章節將會提到.
3.2.3 CBO基初術語
當CBO分析語句時,下列術語將會頻繁使用
Cost(成本)
在CBO中,成本的計算是涉及到每一個操作單位。邏輯上花費多少成本實際上并沒有文檔化或向外界公布,甚至隨版本的不同而發生變化.
Cardinality(基數)
索引中單一行的數量和表中行的數量.查詢基數是希望返回行的數量.
Selectivity(選擇性)
單一值的數量,被索引列的單一值視為選擇性.舉例來說,假如一個表有10000行,已創建的一個索引在一個列中有4000單一值,那么索引的可選擇性為4000/10000*100=40%,在不為空的列上唯一索引的可選擇性為100%.
Transitivity(傳遞性)
對于查詢,CBO生成額外謂詞的處理.它使優化器能考慮額外的執行路徑。舉例來說,假如在查詢中提供了A=B AND B=C的謂詞,優化器可能會添加額外的謂詞來暗示A=C.
Statistics(統計資料)
對于各種不同的數據收集許多必須的信息以支持對象..對于CBO執行計劃來說,它是至關重要的。
Join Methods(連接方法)
Oracle用諸如哈希,合并排序和嵌套連接進行連接.一個查詢可能運行的更快相比較其它的其它方法。對于單個的查詢應該評估連接方法。
FTS(全表掃描)
全表掃描涉及到查詢,從第一塊到最后分配的塊掃描。對于大表是極其昂貴的,應該避免。
Index scan(索引掃描)
涉及到通過使用表上一個或更多的索引,一個表上的隨機訪問.