Oracle:SQL優化

SQL 優化

  1. 使用where子句過濾行
  2. 使用表連接而不是多個查詢
  3. 執行連接時使用完全限定的列引用
  4. 使用case表達式而不是多個查詢
  5. 添加表索引
    當單個查詢的行數小於等於表總行數的10%時,建立b-樹索引
    對於包含小範圍值且在查詢的where子句中頻繁使用的列,應使用位圖索引
  6. 使用where並不是having
  7. 使用union all而不是使用union
    因爲union要刪除重複的行,索引儘量使用union all而不是使用union
  8. 使用exists而不是in
    exists只檢查行的存在性,而in檢查實際的值。所以通常情況下exists性能比in的性能好
  9. 使用exists而不是distinct
    因爲distinct在排除重複行之前要對檢索到的行排序
  10. 使用grouping sets而不是cube
    一般情況下:grouping sets比cube性能好
  11. 使用綁定變量
    oracle會緩存已經執行的sql語句;如果以後執行相同的語句,就重用緩存的sql語句。
    重用緩存的sql語句,sql語句必須完全相同,包括:
    sql語句中的所有字符必須相同
    sql語句中所有字母的大小寫必須相同
    sql語句中所有空格必須相同
    使用綁定變量定義相同的sql語句
variable v_test_id number

begin
:v_test_id := 1;
end;
select * from test where id = :v_test_id;
  1. 比較執行查詢的成本
    oracle數據庫軟件使用稱爲優化器的子系統,生成訪問表中存儲數據的最有效路徑。優化器生成的路徑稱爲執行計劃。
    1>檢查執行計劃description
    describe plan_table
    如果有類似的表,那麼就是有計劃表,否則就要創建表
    2>創建計劃表
    3>生成執行計劃
    語法:
explain plan set statement_id = statement_id for sql_statement;
4>查詢計劃表
5>表連接的執行計劃
explain plan set statement_id = '*****' for
6>收集表統計信息
analyze table test compute statictics;
  1. 優化器傳遞提示
explain plan set statement_id = 'hint' for
select /*+ first_rows(2) */ t.id,t.year
from test
where id = 1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章