ORACLE SQL優化 入門

2021-10-04 08:27:52 字數 2384 閱讀 8732

聽了王海波老師的課後的筆記

1.sql優化需要什麼?

select ... from t1 where t1.***=:***x

2.為什麼建索引可以優化

建立索引以後,oracle就有兩個選擇,當選擇了更優秀的路徑去執行,這個過程就叫做優化。

3.什麼是訪問路徑

訪問路徑是用於從行源檢索行的一種技術

(1)table access full 全表掃瞄

(2)index unique scan 索引唯一掃瞄

(3)index range scan 索引範圍掃瞄

(4)index skip scan 索引跳躍掃瞄

(5)index  full scan 索引全掃瞄

(6)index  fast full scan 索引快速全掃瞄

(7)table access by index rowid 回表

4.為什麼複雜的sql更容易出問題

select .. from t1,t2 where t1.x=t2.x and t1.***=:***x

5.什麼是連線方式

連線方式是用於兩個集合通過某種關係殘生乙個新集合的方法

(1)巢狀迴圈(nested loops)

(2)hash連線 (hash join)

(3)排序合併連線 (sort merge join)

(4)笛卡爾連線(cartesian join)

(5)標量子查詢(scalar subquery)

(6)半連線(semi join)

(7)反連線(anti join)

(8)filter

6.oracle是怎麼判斷某一條路是最優?

執行計畫:是一條sql語句中在oracle中執行過程和訪問路徑的描述。

執行計畫具體實施,可參考

oracle認為執行計畫中cost值越小,執行效率越高,所以oracle會優先選擇cost值小的執行計畫

7.壓力測試,cpu使用率不能超過70%

8.執行計畫中cost值是依據什麼計算出來的

rbo(基於規則的優化器)和cbo(基於成本的優化器)

rbo它有著一套嚴格的使用規則,只要你按照它去寫sql語句,無論資料表中的內容怎樣,也不會影響到你的「執行計畫」,也就是說rbo對資料不「敏感」;它根據oracle指定的優先順序規則,對指定的表進行執行計畫的選擇。比如在規則中,索引的優先順序大於全表掃瞄;rbo是根據可用的訪問路徑以及訪問路徑等級來選擇執行計畫,在rbo中,sql的寫法往往會影響執行計畫,它要求開發人員非常了解rbo的各項細則,菜鳥寫出來的sql指令碼效能可能非常差。隨著rbo的被遺棄,漸漸不為人所知。

cbo是一種比rbo更加合理、可靠的優化器,它是從oracle 8中開始引入,但到oracle 9i 中才逐漸成熟,在oracle 10g中完全取代rbo, cbo是計算各種可能「執行計畫」的「代價」,即cost,從中選用cost最低的執行方案,作為實際執行方案。它依賴資料庫物件的統計資訊,統計資訊的準確與否會影響cbo做出最優的選擇。如果對一次執行sql時發現涉及物件(表、索引等)沒有被分析、統計過,那麼oracle會採用一種叫做動態取樣的技術,動態的收集表和索引上的一些資料資訊。

9.什麼是統計資訊

統計資訊主要是描述資料庫中表,索引的大小,規模,資料分布狀況等的一類資訊。例如,表的行數,塊數,平均每行的大小,索引的leaf blocks,索引欄位的行數,不同值的大小等,都屬於統計資訊。cbo正是根據這些統計資訊資料,計算出不同訪問路徑下,不同join 方式下,各種計畫的成本,最後選擇出成本最小的計畫。

10.統計資訊不準確怎麼辦

統計資訊過期:(1).表中的資料變化達到30%,oracle會標記為過期狀態  (2)從未進行統計資訊收集活著長時間未收集

oracle hints是一種機制,用來告訴優化器按照我們的告訴它的方式生成執行計畫。

hint:此時就需要dba進行人為的干預,告訴優化器使用我們指定的訪問路徑或連線型別生成執行計畫,從 而使語句高效的執行。例如,如果我們認為對於乙個特定的語句,執行全表掃瞄要比執行索引掃瞄更有效,則我們就可以指示優化器使用全表掃瞄。在oracle 中,是通過為語句新增 hints(提示)來實現干預優化器優化的目的。

不建議在**中使用hint,在**使用hint使得cbo無法根據實際的資料狀態選擇正確的執行計畫。畢竟 資料是不斷變化的, 10g以後的cbo也越來越完善,大多數情況下我們該讓oracle自行決定採用什麼執行計畫。

hint參考:

手動收集統計資訊**可參考:

11.是否執行計畫最優,執行效率就好?

正常的開發過程中,會有多種sql語句寫法,會導致優化器在解析的時候只能走某一種固定的計畫執行。此時就算執行計畫最優,執行效率也未必好

如下需要注意的幾種情況:

MySQL優化入門

表 符合三正規化 nf 一正規化 表的列具有原子性 不可再分割 列的資訊不能分割 關係型資料庫自動滿足一正規化 二正規化 表中的記錄是唯一的 設定主鍵,不含業務邏輯,資料穩定,不用修改 三正規化 表中不要有冗餘資料 表的資訊如果能被推導出來 就不應該單獨設計乙個字段 設計者有時候為了方便 多設計字段...

dp 優化入門

蒟蒻學了這個忘了那個,學了那個忘了這個,於是開篇部落格總結一下 qwq 不過等我 github 部落格弄好了就不會在這裡更新了 題目描述 n 個玩具,第 i 個玩具長度為 c i 要求將玩具分成若干段,定義一段 l,r 的權值 l 為 r l sum rc k 一段長為 x 的段的費用為 x l 2...

決策單調性優化入門

對於乙個二元函式 w l,r 如果有下面的命題成立,則稱 w 滿足四邊形不等式 forall a leq b c leq d,w a,c w b,d leq w a,d w b,c 如果二元函式 w a,b 滿足 w a 1,b 1 w a,b leq w a,b 1 w a 1,b 那麼 w a,...