執行計劃小總結

1. why

工做中偶爾會遇到性能很差的複雜sql語句,在定位不了問題的狀況下就須要執行計劃出馬了。mysql

2. what

執行計劃顧名思義,就是oracle內部執行Sql語句的詳細計劃步驟。固然,其餘數據庫好比mysql、sqlsever等也有這個概念。本文以我經常使用的oracle爲例。sql

3. how

如可查看執行計劃?其實有不少種方法。數據庫

最簡單的,用IDE自帶組件,好比sql developer上的查看執行計劃按鍵(快捷鍵F10)oracle

稍微複雜點的,用代碼查看:oop

EXPLAIN PLAN FOR (SELECT * FROM TEMP);--方法1

SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));--方法2

SQL> select * from table(dbms_xplan.display);--方法3

4. then

解讀執行計劃
join的時候,有三種方式:hash join、 merge join、nested loop性能

  • A、B兩表誰在前誰在後並不影響執行計劃,計劃會自動算出最優的執行方法
  • 當nested loop,最優執行計劃通常是小表做爲驅動表只遍歷一遍。
  • Nested loop通常用在鏈接的表中有索引,而且索引選擇性較好的時候;Hash join在兩個表的數據量差異很大的時候.Sort Merge join 用在沒有索引,而且數據已經排序的狀況.
  • 一般來說,可以使用merge join的地方,hash join均可以發揮更好的性能。
相關文章
相關標籤/搜索