sql優化(oracle)- 第三部分 sql優化總結
阿新 • • 發佈:2017-07-16
mit 設計 tinc 重復 tin spa 替代 嵌套 多個
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優化總結
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優化總結