Oracle 資料庫最佳化

來源:互聯網
上載者:User

標籤:col   code   轉換   center   臨時   資訊管理   rebuild   lead   segment   

 

 

 

 

 

Oracle 資料庫最佳化

 

 

 

 

 

 

資訊管理部

 

 

目錄

一、 SELECT查詢語句中避免使用 ‘*’.................................................... 2

二、 減少資料庫訪問次數:............................................................................. 2

三、 查詢單條記錄............................................................................................... 2

四、 選擇最優表名順序:................................................................................. 2

五、 WHERE子句中的串連............................................................................... 3

六、 使用DECODE函數可以避免重複掃描相同記錄或重複串連相同的表    3

七、 刪除全表操作推薦使用TRUNCATE不建議使用DELETE............. 3

八、 盡量多使用COMMIT:............................................................................ 4

九、 減少對錶的查詢:...................................................................................... 5

十、 通過內建函式提高SQL效率.:............................................................ 5

十一、 使用表的別名(Alias):.......................................................................... 5

十二、 對常用查詢條件設定索引................................................................... 5

十三、 sql語句用大寫的;因為oracle總是先解析sql語句,把小寫字母轉換成大寫的再執行.................................................................................................................... 6

十四、 在java代碼中盡量少用串連符“+”連接字串!............... 6

十五、 避免在索引列上使用NOT.................................................................. 6

十六、 避免在索引上使用計算........................................................................ 6

十七、 用>=替代>............................................................................................... 6

十八、 用UNION替換OR (適用於索引列)................................................ 6

十九、 普通查詢中用IN來替換OR.............................................................. 7

二十、 避免在索引列上使用IS NULL和IS NOT NULL.......................... 7

二十一、 總是使用索引的第一個列:.......................................................... 7

二十二、 用UNION-ALL 替換UNION ( 如果有可能的話):............. 7

二十三、 避免改變索引列的類型.:................................................................. 7

二十四、 某些WHERE子句不使用索引....................................................... 7

二十五、 避免使用耗費資源的操作:.............................................................. 8

二十六、 最佳化GROUP BY.................................................................................. 8

二十七、 .................................................................................................................. 8

 

 

 

一、SELECT查詢語句中避免使用 ‘*’

二、減少資料庫訪問次數:

      減少資料庫IO操作壓力

三、查詢單條記錄

四、選擇最優表名順序:

       Oracle解析器解析規則從右向左的順序處理From子句表名,此時宜將記錄條數最少的表或者交叉表(被其他引用的表)作為基礎資料表(From子句中寫最後的表)

五、WHERE子句中的串連

Oracle解析器解析WHERE子句採用從下到上的順序解析,過濾大量資料的篩選條件推薦寫在WHERE子句最後

六、使用DECODE函數可以避免重複掃描相同記錄或重複串連相同的表

七、刪除全表操作推薦使用TRUNCATE不建議使用DELETE

TRUNCATE將會徹底刪除資料不可恢複,消耗資源小於DELETE。

① 在功能上,truncate是清空一個表的內容,它相當於delete from table_name

② delete是dml操作,truncate是ddl操作;因此,用delete刪除整個表的資料時,會產生大量的roolback(復原),佔用很多的rollback segments(復原段), 而truncate不會

③ 在記憶體中,用delete刪除資料,資料表空間中其被刪除資料的表佔用的空間還在,便於以後的使用,另外它是“假相”的刪除,相當於windows中用delete刪除資料是把資料放到資源回收筒中,還可以恢複,當然如果這個時候重新啟動系統(OS或者RDBMS),它也就不能恢複了!

而用truncate清除資料,記憶體中資料表空間中其被刪除資料的表佔用的空間會被立即釋放,相當於windows中用shift+delete刪除資料,不能夠恢複!

④ truncate 調整high water mark 而delete不;truncate之後,TABLE的HWM退回到 INITIAL和NEXT的位置(預設)delete則不可以。

⑤truncate只能對TABLE,delete 可以是table,view,synonym

⑥TRUNCATETABLE 的對象必須是本模式下的,或者有drop any table的許可權 而 DELETE 則是對象必須是本模式下的,或被授予 DELETE ONSCHEMA.TABLE 或DELETE ANY TABLE的許可權

⑦在外層中,truncate或者delete後,其佔用的空間都將釋放

⑧truncate和delete只刪除資料,而drop則刪除整個表(結構和資料)

小技巧:在刪除大資料量時(一個表中大部分資料時),

先將不需要刪除的資料複製到一個暫存資料表中;

trunc table 表;

將不需要刪除的資料複製回來。

八、盡量多使用COMMIT:

儘可能使用COMMIT需求釋放的資源而減少:

COMMIT所釋放的資源:

a. 復原段上用於恢複資料的資訊.

b. 被程式語句獲得的鎖

c. redo logbuffer 中的空間

d. ORACLE為管理上述3種資源中的內部花費

九、減少對錶的查詢:

在含有子查詢的SQL語句中,要特別注意減少對錶的查詢..

十、 通過內建函式提高SQL效率.:

複雜的SQL往往犧牲了執行效率. 更傾向於運用函數解決問題

十一、使用表的別名(Alias):

當在SQL語句中串連多個表時, 請使用表的別名並把別名首碼於每個Column上.這樣一來,就可以減少解析的時間並減少那些由Column歧義引起的語法錯誤.

十二、對常用查詢條件設定索引

索引是表的一個概念部分,用來提高檢索資料的效率,ORACLE使用了一個複雜的自平衡B-tree結構. 通常,通過索引查詢資料比全表掃描要快.當ORACLE找出執行查詢和Update語句的最佳路徑時, ORACLE最佳化器將使用索引. 同樣在連接多個表時使用索引也可以提高效率. 另一個使用索引的好處是,它提供了主鍵(primarykey)的唯一性驗證.。那些LONG或LONG RAW資料類型, 你可以索引幾乎所有的列. 通常, 在大型表中使用索引特別有效.當然,你也會發現, 在掃描小表時,使用索引同樣能提高效率. 雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價. 索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改. 這意味著每條記錄的INSERT , DELETE , UPDATE將為此多付出4 , 5 次的磁碟I/O . 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.。週期性重構索引是有必要的:

ALTER INDEX<INDEXNAME> REBUILD <TABLESPACENAME>

十三、sql語句用大寫的;因為oracle總是先解析sql語句,把小寫字母轉換成大寫的再執行

十四、在java代碼中盡量少用串連符“+”連接字串!

十五、避免在索引列上使用NOT  

NOT會產生在和在索引列上使用函數相同的影響. 當ORACLE”遇到”NOT,他就會停止使用索引轉而執行全表掃描.

十六、避免在索引上使用計算

索引列是函數的一部分.最佳化器將不使用索引而使用全表掃描.

十七、用>=替代>

資料記錄處理機制問題

十八、用UNION替換OR (適用於索引列)

用UNION替換WHERE子句中的OR將會起到較好的效果.對索引列使用OR將造成全表掃描. 注意, 以上規則只針對多個索引列有效. 如果有column沒有被索引, 查詢效率可能會因為你沒有選擇OR而降低

十九、普通查詢中用IN來替換OR

二十、避免在索引列上使用ISNULL和IS NOT NULL

盡量避免在欄位資訊中出現空值,在索引中出現空值欄位會導致ORACLE無法使用該索引

二十一、總是使用索引的第一個列:

如果索引是建立在多個列上, 只有在它的第一個列(leading column)被where子句引用時,最佳化器才會選擇使用該索引. 這也是一條簡單而重要的規則,當僅引用索引的第二個列時,最佳化器使用了全表掃描而忽略了索引

二十二、 用UNION-ALL 替換UNION ( 如果有可能的話):

當SQL語句需要UNION兩個查詢結果集合時,這兩個結果集合會以UNION-ALL的方式被合并, 然後在輸出最終結果前進行排序. 如果用UNION ALL替代UNION,這樣排序就不是必要了

UNION ALL 將重複輸出兩個結果集合中相同記錄,所以請根據具體需求使用。

二十三、避免改變索引列的類型.:

當比較不同資料類型的資料時, ORACLE自動對列進行簡單的類型轉換. .

二十四、某些WHERE子句不使用索引

(1)‘!=‘ 將不使用索引. 記住, 索引只能告訴你什麼存在於表中,而不能告訴你什麼不存在於表中.

(2)‘||‘是字元串連函數. 就象其他函數那樣, 停用了索引.

(3)‘+‘是數學函數. 就象其他數學函數那樣, 停用了索引.

(4)相同的索引列不能互相比較,這將會啟用全表掃描.

二十五、 避免使用耗費資源的操作:

帶有DISTINCT,UNION,MINUS,INTERSECT,ORDERBY的SQL語句會啟動SQL引擎

執行耗費資源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要執行兩次排序. 通常, 帶有UNION, MINUS, INTERSECT的SQL語句都可以用其他方式重寫.

二十六、 最佳化GROUP BY

提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉

Oracle 資料庫最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.