1. 程式人生 > >sql優化(oracle)- 第三部分  sql優化總結

sql優化(oracle)- 第三部分  sql優化總結

mit 設計 tinc 重復 tin spa 替代 嵌套 多個

第三部分 sql優化總結
1. 優化一般原則
2. 具體註意事項

1. SQL優化一般性原則
  1)目標:減少服務器資源消耗(主要是磁盤IO)
  2)設計:
    1. 盡量依賴oracle優化器
    2. 合適的索引(數據重復量大的列不要簡歷二叉樹索引,可以使用位圖索引; 對應數據操作頻繁的表,索引需要定期重建,減少失效的索引和碎片)
  3)編碼:
    1. 利用索引
    2. 合理利用臨時表
    3. 避免寫過於復雜的sql;
    4. 盡量減小事務的粒度

2. 具體註意事項
  1)查詢時盡量使用確定的列名
  2)盡量少使用嵌套的子查詢,這種查詢很消耗cpu資源
  3)多表查詢的時候,選擇最有效率的表名順序
   oracle解析器對表的處理順序從右到左,所以記錄少的表放在右邊(最右邊的表為基礎表,drivering table最先被處理), 如果3個以上的表連接查詢,則要選擇交叉表作為基礎表


  4)or比較多時分為多個查詢,使用union all(盡量用union all代替union)聯結(適應於索引列)
  5) 盡量多用commit提交事務,可以及時釋放資源、解鎖、釋放日誌
  6)訪問頻繁的表可以放置在內存中
  7)避免復雜的多表關聯
  8)避免distinct,union(並集),minus(差集),intersect(交集),order by等耗費資源的操作,因為會執行耗費資源的排序功能
  9)使用exists替代distinct
   select c.distinct c.classname, c.classid, classno from student s, class c where s.classno= c.classno;

  --替換為
   select classname, classid, classno from class c where exists (select * from student s where s.classno = c.classno);

    delete刪除時,沒有commit前可以回滾;truncate後不能回滾,執行時間較短
   11)使用表的別名,可以減少解析時間
   12)exists和in的選擇問題,不同時候區分對待
   13)合理使用索引

sql優化(oracle)- 第三部分  sql優化總結