Oracle数据库sql调优
最近做的一個項目涉及到大數(shù)據(jù)量的數(shù)據(jù)表查詢。數(shù)據(jù)表總量在7億-20億左右,以主鍵建立全局唯一索引,分區(qū)策略是hash分區(qū)+范圍分區(qū),很大部分情況下查詢條件命中記錄數(shù)超過萬條,單次返回前XX條記錄。在調優(yōu)過程中總結出以下經(jīng)驗:
(1)在業(yè)務規(guī)則允許的情況下,盡量減少區(qū)間限制條件,即便該屬性是索引字段。如:DATE>=min AND DATA <= max。如果有區(qū)間限制條件,會將所有記錄與限制條件逐一比較,如果記錄數(shù)較大,則會嚴重影響查詢效率。
(2)使用order by排序盡量保證與索引順序一致,oracle在建立索引的時候會默認以升序排序,order by規(guī)則與索引建立順序一致的話則不會再單獨進行排序操作
(3)如果查詢條件均在索引范圍,可考慮先搜索索引的rowid,通過rowid回表獲取數(shù)據(jù)。該方法的好處是盡量減少回表訪問。需要注意的是,該方法適合返回數(shù)據(jù)量較小的情況,如翻頁記錄等。
目前還存在多hash分區(qū)數(shù)據(jù)訪問排序效率很慢的問題,還在解決中,待續(xù)!!!!
(4)在查詢總記錄條數(shù)時,建議sql寫法為SELECT COUNT(1) FROM TABLE_NAME WHERE [OPTION CONDITION...]。若查詢條件均為索引字段,這樣寫的好處是不用進行回表操作,直接查找索引獲得結果。
轉載于:https://www.cnblogs.com/xt2008/p/5735036.html
總結
以上是生活随笔為你收集整理的Oracle数据库sql调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (2)安装宝塔与docker及docke
- 下一篇: Redis开发与运维学习笔记