全表掃描是怎麼掃描的?sql
oracle最小的存儲單位是block服務器
物理上連續的block組成了extent(也就是說一個區中的全部塊在物理上是連續的)網絡
不少個extent組成了segment(一個segment中的區在物理上多是連續的,也多是不連續的)併發
全表掃描是一個區一個區的掃描的,由於一個區內多個塊在物理上是連續的,因此能夠多塊讀。oracle
最經常使用的:set autotrace trace函數
統計信息的意義:高併發
recursive calls :遞歸調用的次數(遞歸調用是指,執行目標sql時,須要執行一些別的sql來爲目標sql服務。eg:解析,查數據字典,插入數據字典,或目標sql中調用了用戶自定義函數等)優化
通常一個新的sql執行2-3次之後遞歸調用次數就爲0了,除非sql中有用戶自定義函數。-----這個指標在優化中,通常不用過多關注。spa
db block get:有多少個塊被修改了,單位是塊(只有dml才能修改塊,一個select語句通常狀況下,db block get爲0,當延遲塊清除的時候,select 的 db block get可能不爲0【延遲塊清除沒什麼意義,不用過多關注】)日誌
consistent get:邏輯讀,一個塊在buffer cache中,被掃描一次,邏輯讀就+1,邏輯讀多是讀不一樣的塊,也多是一個塊讀了屢次。
【場景demo:若是一個表中好多的塊都被修改過,在undo中,由於咱們要讀undo,還要從新構造鏡像塊。因此,在一個高併發的dml情景下,select的邏輯讀可能要比標準狀況下高几倍。】
physical reads:物理讀,將一個塊從磁盤讀到buffer cache,物理讀+1. (邏輯讀是包含物理讀的。)
redo size:跑這個sql產生多少的redo日誌。(只要db block get爲0,redo size爲0)
這兩個是網絡指標,從服務器發送多少到客戶端,從客戶端接收了多少,不用過多關注。
sorts(memory)和sorts(disk):內存排序和磁盤排序,優化中基本沒用。不用關注。
1 rows processed(這一列是重點很是有用):sql語句處理或返回了多少行,能直觀的看出來,這個sql能不能優化。
【【【 重要的,有用的信息:consistent get 和 rows processed 】】】