1、檢查SQL語句關聯到的表有多少個 數據庫
一條SQL語句若是關聯到的表個數太多,就會因爲排列組合的基數增大,致使CBO在產生執行計劃的時候,可選執行計劃太多,這不只會增長CBO得到最優執行計劃的時間,還可能使SQL語句的執行計劃變得很不穩定,讓同一條SQL語句在某個狀況下出現執行效率較低的狀況.通常而言,參與SQL語句的表個數不要超過5個,尤爲是參與鏈接的表不是主鍵關聯的基表時,表的鏈接個數更不要太多,若是的確要關聯那麼多表,就要考慮是否能夠將SQL語句拆分,或者是不是表結構的設計不太合理,須要考慮方法加以改善。 函數
2、SQL語句關聯主表中的WHERE條件是否有合適的索引 spa
咱們都很害怕SQL語句在執行時出現全表掃描,尤爲是大表的全表掃描,這在多數狀況下不無道理,由於咱們的數據大可能是在線實時處理的,此時SQL語句選擇的數據量不能太多,響應時間卻要求極高,這說明數據的選擇性通常較好,經過全表掃描可能不太合理,每每須要經過區分度高的索引來直接篩選數據。若是SQL中關聯主表的WHERE條件上有索引,查看執行計劃時也確實用到了這個索引,問題就不會太大,若是沒有索引,就要考慮其餘的已知條件是否能夠有效篩選數據,仍是不行的話,建議對該表新建一個索引進行評估。 設計
3、SQL語句中是否使用了不恰當的函數 索引
在 SQL 語句中不恰當地使用函數,尤爲是在索引字段上使用函數,會下降 SQL 語句的執行效率,這幾乎成了咱們的共識,不過,咱們在 SQL 開發時,仍然會不經意的、在不必定要使用函數的地方使用函數,這一點在日期函數的使用上表現得比較突出,比較典型的寫法爲: trunc( 表的日期字段 )>= 或 <=trunc( 傳入的日期變量 ), 其實這種寫法能夠轉變爲僅在變量這部分使用函數,而沒必要要在數據庫的字段上使用函數。