【SQL優化】SQL優化的10點注意事項
1.目前普遍採用的10g資料庫已經採用CBO的優化方式,所以記得定期的對資料庫核心業務使用者進行全面或有選擇的分析,防止出現執行計劃出現異常。
Oracle 10g以及以後的11g自動化一切的背後隱藏著很多神祕而有趣的東西。
2.充分共享SQL語句,方法是在書寫程式的時候儘量使用繫結變數
是否能共享SQL語句需要滿足如下三個條件:
1)能共享的SQL語句需要每個字元都要完全一樣,即使是空格的數量也要一樣;
2)需要語句所引用的的物件必須完全相同,如果引用的是不同使用者的內容也無法共享
3)繫結變數的名字要求必須一樣
3.程式中全面禁止使用select *樣式的SQL語句
原因之一:Oracle會將“*”依次轉換成所有的列名,需要查詢資料字典,耗費資源;
原因之二:考慮到表結構的變化,不利於程式的維護。
4.減少資料庫訪問的次數,這點符合“少讀和少寫原則”
原因:訪問資料庫解析是有代價的
例如:能用一條關聯語句查詢出來結果時,就不要分多條語句進行檢索。
5.對於需要快速大批量的刪除資料時,要使用TRUNCATE替代DELETE操作。
6.在使用like語句時,避免使用like '%abc'形式,否則無法使用到索引(對索引特殊處理除外)
原因:WHERE子句中, 如果索引列所對應的值的第一個字元由萬用字元(WILDCARD)開始, 索引將不被採用。
7.不要在索引列上進行函式類的計算
原因:WHERE子句中,如果對索引列進行函式計算,優化器將不能有效的使用索引而選擇全表掃描。
迂迴的處理方法:如果確實要頻繁的使用到函式操作,可以考慮在相應列上使用函式索引。
8.不要在索引列上使用IS NULL和IS NOT NULL做限制條件
原因:Oracle中的null在索引中是不記錄的。
9.在索引列上可以考慮使用UNION代替OR運算子
原因:使用UNION代替OR的方法從執行計劃上來看,避免了FILTER操作,降低了一致性讀(consistent gets),從而提高了SQL的執行效率。
如果操作的是索引列,更加推薦使用這樣的替換方式,可以有效的提高SQL的執行效率,這也是OR運算子的一種很好的優化方法。
如果不是索引列,需要具體情況具體分析。
OR運算子的優化,有時也可以考慮通過IN的方式來限制,也可以不同程度的提高一些SQL的執行效能
10.第十點就是優化最最基本的原則——優化後達到“少讀少寫”的目的
通過執行計劃等有效的工具來反覆比較優化前和優化後對資料庫的讀寫情況,往往優化後的共同特徵就是讓SQL能夠儘量的少讀資料庫和少寫資料庫。
先列這10條,歡迎大家補充。
-- The End --
Oracle 10g以及以後的11g自動化一切的背後隱藏著很多神祕而有趣的東西。
2.充分共享SQL語句,方法是在書寫程式的時候儘量使用繫結變數
是否能共享SQL語句需要滿足如下三個條件:
1)能共享的SQL語句需要每個字元都要完全一樣,即使是空格的數量也要一樣;
2)需要語句所引用的的物件必須完全相同,如果引用的是不同使用者的內容也無法共享
3)繫結變數的名字要求必須一樣
3.程式中全面禁止使用select *樣式的SQL語句
原因之一:Oracle會將“*”依次轉換成所有的列名,需要查詢資料字典,耗費資源;
原因之二:考慮到表結構的變化,不利於程式的維護。
4.減少資料庫訪問的次數,這點符合“少讀和少寫原則”
原因:訪問資料庫解析是有代價的
例如:能用一條關聯語句查詢出來結果時,就不要分多條語句進行檢索。
5.對於需要快速大批量的刪除資料時,要使用TRUNCATE替代DELETE操作。
6.在使用like語句時,避免使用like '%abc'形式,否則無法使用到索引(對索引特殊處理除外)
原因:WHERE子句中, 如果索引列所對應的值的第一個字元由萬用字元(WILDCARD)開始, 索引將不被採用。
7.不要在索引列上進行函式類的計算
原因:WHERE子句中,如果對索引列進行函式計算,優化器將不能有效的使用索引而選擇全表掃描。
迂迴的處理方法:如果確實要頻繁的使用到函式操作,可以考慮在相應列上使用函式索引。
8.不要在索引列上使用IS NULL和IS NOT NULL做限制條件
原因:Oracle中的null在索引中是不記錄的。
9.在索引列上可以考慮使用UNION代替OR運算子
原因:使用UNION代替OR的方法從執行計劃上來看,避免了FILTER操作,降低了一致性讀(consistent gets),從而提高了SQL的執行效率。
如果操作的是索引列,更加推薦使用這樣的替換方式,可以有效的提高SQL的執行效率,這也是OR運算子的一種很好的優化方法。
如果不是索引列,需要具體情況具體分析。
OR運算子的優化,有時也可以考慮通過IN的方式來限制,也可以不同程度的提高一些SQL的執行效能
10.第十點就是優化最最基本的原則——優化後達到“少讀少寫”的目的
通過執行計劃等有效的工具來反覆比較優化前和優化後對資料庫的讀寫情況,往往優化後的共同特徵就是讓SQL能夠儘量的少讀資料庫和少寫資料庫。
先列這10條,歡迎大家補充。
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-613944/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL最佳化】SQL最佳化的10點注意事項SQL
- SQL優化例項SQL優化
- SEO優化的注意事項是什麼?優化
- 【SQL優化】SQL優化工具SQL優化
- 段合併優化及注意事項優化
- SQL Server優化之SQL語句優化SQLServer優化
- SQL優化例項-思路分析SQL優化
- SQL精華總結索引型別優化SQL優化事務大表優化思維導圖❤️SQL索引型別優化
- SQL優化SQL優化
- with as優化sql優化SQL
- 效能優化案例-SQL優化優化SQL
- SQL優化常用方法10SQL優化
- PL/SQL 事務持久化異常 / PL/SQL commit優化SQL持久化MIT優化
- OpenGL 優化項之面剔除和注意點優化
- SQL開發例項和優化SQL優化
- 關於mysql執行效率優化注意事項及要點MySql優化
- 資料庫優化 - SQL優化資料庫優化SQL
- sql優化之邏輯優化SQL優化
- SQL優化:limit分頁優化SQL優化MIT
- MySQL 效能優化之SQL優化MySql優化
- SQL優化--用各種hints優化一條SQLSQL優化
- mysql的sql優化MySql優化
- 優化SQL中的or優化SQL
- SQL SERVER中SQL優化SQLServer優化
- SQL優化指南SQL優化
- SQL SERVER優化SQLServer優化
- sql效能優化SQL優化
- Sql優化方法SQL優化
- oracle sql優化OracleSQL優化
- SQL優化-索引SQL優化索引
- SQL優化(一)SQL優化
- oracle sql 優化OracleSQL優化
- sql 效能優化SQL優化
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- SQL優化的方法論SQL優化