【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/29065182/viewspace-1156637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL優化】SQL優化的10點注意事項SQL優化
- SQL 語句的注意事項SQL
- SQL TUNNING 注意事項SQL
- sql最佳化:使用sql profile最佳化sql語句SQL
- Oracle PL/SQL編寫PL/SQL程式碼的注意事項OracleSQL
- SQL登入失敗注意事項SQL
- SQL Server Profiler 設定注意事項SQLServer
- SQL Server中流水號生成的注意事項SQLServer
- SQL最佳化SQL
- SQL Server 表分割槽注意事項HXSQLServer
- SQL的最佳化[轉]SQL
- SQL最佳化1SQL
- PL/SQL最佳化SQL
- sql最佳化(mysql)MySql
- SQL最佳化方案SQL
- sql最佳化技巧SQL
- SQL Server Alwayson建立代理作業注意事項SQLServer
- 最佳化sql的利器SQLTSQL
- Oracle SQL的最佳化[轉]OracleSQL
- Oracle SQL Like 的最佳化OracleSQL
- sql語句的最佳化SQL
- SQL Server查詢最佳化中的兩個選項SQLServer
- 小米 sql 最佳化工具SQL
- SQL最佳化問題SQL
- SQL 最佳化手冊SQL
- SQL最佳化(一) 索引SQL索引
- sql最佳化工具SQLTSQL
- Oracle SQL效能最佳化OracleSQL
- Oracle sql 效能最佳化OracleSQL
- 最佳化sql語句SQL
- SQL最佳化 之 -- joinSQL
- 08SQL最佳化SQL
- SQL語句最佳化SQL
- SQL效能最佳化之索引最佳化法SQL索引
- 效能最佳化之SQL語句最佳化SQL
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- SpringBoot最佳化之——1.Thymeleaf 配置等注意事項Spring Boot