oracle sql tuning 5--避免防範或者減少問題SQL
SQL語句這麼容易出問題,能不能採取措施避免防範呢?
1.核查優化器的統計資訊
查詢優化器通過表,索引等的統計資訊來決定使用那種執行計劃.如果說統計資訊沒有被收集,或者說統計資訊是過時的,不能代表資料庫中最新的統計資訊情況,那麼優化器將沒有足夠的資訊來生成好的執行計劃.
大致可以通過以下兩種方式核查
#1.收集部分表的統計資訊,或者全部。這樣對於那些使用表關聯的語句有好處
#2.如果統計資訊過時了,完全不能反映資料庫現狀的話,那麼就需要重新收集。通過檢視一個表現有的統計條數,在看統計資訊中的條數是否一樣,如果相差很遠,那不用說了,統計資訊肯定過時了.有用的檢視有user_tables,dba_tables這裡邊都能看到表的條數,最後統計時間等資訊
#3.評估執行計劃
當在OLTP環境下調整SQL的時候,要儘量使少的資料流入到下一步操作中,如果下一步是一個表的關聯,那麼這就著只有少數行在參與關聯。確認執行路徑是否是最佳的
當檢查執行計劃時,可以關注下以下資訊
The plan is such that the driving table has the best filter.我認為是驅動表應該被充分過慮
每一步的連線順序應該滿足一個總體條件,那就是,流入下一步的資料要儘可能減少
連線要適當,所謂適當就是返回資料的量不要太大。比如:nested loop joins 中用到了索引,這本來是好事,但是當返回的資料量很大時,這可能就不是最優的了
有效的使用檢視,檢查select列表,看訪問檢視是否是必要的
笛卡爾集不要出現,那怕是很小的表!
要讓每個表被有效的訪問
考慮語句中的關鍵詞,表的記錄數。查詢可疑處,例如對於大表的FULL TABLE SCANS 。在WHERE條件中有關鍵詞出現等。確定為什麼SELECT語句沒有使用索引.
全表掃描並不意味著效率不高,對於小表它更有用。如果說以上需要注意的地方都覺得有問題,那還是重寫SQL吧!
當SQL問題太多,不得不重建SQL的時候...
通常重寫無效SQL,比取調整它要來得容易,如果你理解語句的目的,那麼寫出符合要求的語句是很輕鬆的事
重建SQL可以考慮以下一些情況
#1.關聯的時候儘量用=,and
#2.避免WHERE條件中有轉換情況出現,如:
WHERE A.ORDER_NO =B.ORDER_NOd要好過
WHERE TO_NUMBER (SUBSTR(a.order_no, INSTR(b.order_no, '.') - 1))
= TO_NUMBER (SUBSTR(a.order_no, INSTR(b.order_no, '.') - 1))
在謂詞或者WHERE條件中不要使用SQL函式,因為這種情況下優化器很有可能不能利用到索引,除去函式是基於索引的函式這種情況.
避免寫不清楚的SQL,小心ORACLE的隱式轉換,例如:當你想使用索引,在varchar2_col列上,你在條件中卻寫到 and varchar2_col = number_col[數字列]
這種情況下ORACLE會做什麼呢,to_numbwr(varchar2_col)=number_col
避免複雜的表示式,例如:
col1 = NVL (:b1,col1)
NVL (col1,-999) = ….
TO_DATE(), TO_NUMBER(), 等
原因在於這種些表示式影響優化器選擇基數,影響全域性執行計劃
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15720542/viewspace-629379/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL 語句調優_減少或者避免笛卡爾乘積的發生SQL
- Oracle SQL Perfomance TuningOracleSQL
- oracle sql tuning 3--常用檢查問題語句OracleSQL
- 13_共享SQL減少硬解析SQL
- 減少SQL Server死鎖的方法SQLServer
- 高效的SQL( clustering factor減少COST)SQL
- Oracle SQL優化之sql tuning advisorOracleSQL優化
- oracle實用sql(3)--sql tuning advisorOracleSQL
- sql tuningSQL
- 減少SQL日誌的三種方法(轉)SQL
- Oracle SQL優化之sql tuning advisor(STA)OracleSQL優化
- oracle sql tuning 14 --10046OracleSQL
- ORACLE SQL Tuning Health-Check(SQLHC)OracleSQL
- MySQL 及 SQL 注入與防範方法MySql
- oracle sql tuning 10 理解優化器訪問路徑OracleSQL優化
- sql tuning task和sql profileSQL
- Automatic SQL Tuning and SQL ProfilesSQL
- sql tuning set/sql tuning advisor(待完善)SQL
- oracle SQL最佳化器SQL Tuning Advisor (STA)OracleSQL
- Oracle SQL最佳化之sql tuning advisor(STA)OracleSQL
- sql tuning setSQL
- 熟悉SQL tuningSQL
- oracle sql tuning 2--調優工具OracleSQL
- oracle sql tuning 9--理解優化器訪問路徑OracleSQL優化
- 【SQL】Oracle避免動態SQL,提高過程執行效率SQLOracle
- 高效的SQL語句有助於減少資料庫的訪問次數SQL資料庫
- 【筆記】SQL tuning筆記SQL
- Automatic SQL Tuning in Oracle Database 11gSQLOracleDatabase
- ORACLE SQL TUNING ADVISOR 使用方法OracleSQL
- oracle sql tuning 8--常用的檢視OracleSQL
- Oracle12c中SQL最佳化(SQL TUNING)新特性之SQL計劃指令OracleSQL
- Oracle中SQL調優(SQL TUNING)之最權威獲取SQL執行計劃大全OracleSQL
- oracle11g中SQL最佳化(SQL TUNING)新特性之SQL Plan Management(SPM)OracleSQL
- SQL SERVER和ORACLE的排序問題SQLServerOracle排序
- SPA_SQL Performance Analyzer_SQL Tuning SetSQLORM
- oracle sql tuning 1--總體原則方法OracleSQL
- SQL隱碼攻擊的分類與防範SQL
- SQL TUNING ADVISORSQL