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

來源:互聯網
上載者:User

標籤:解析   失效   tin   sts   資源   oracle最佳化   刪除   區分   訪問   

第三部分  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最佳化總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.