sql調優技巧

2021-06-26 18:49:21 字數 2139 閱讀 5988

1 避免無計畫的全表掃瞄

如下情況進行全表掃瞄:

-          該錶無索引

-          對返回的行無人和限制條件(無where子句)

-          對於索引主列(索引的第一列)無限制條件

-          對索引主列的條件含在表示式中

-          對索引主列的限制條件是is (not) null或!=

-          對索引主列的限制條件是like操作且值是乙個bind variable或%打頭的值

2 只使用選擇性索引

索引的選擇性是指索引列中不同值得數目和標誌中記錄數的比,選擇性最好的是非空列的唯一索引為1.0。

復合索引中列的次序的問題:

1 在限定條件裡最頻繁使用的列應該是主列

2 最具有選擇性的列(即最清晰的列)應該是主列

如果1和2 不一致,可以考慮建立多個索引。

在復合索引和多個單個索引中作選擇:

考慮選擇性 考慮讀取索引的次數  考慮and-equal操作

3 管理多表連線(nested loops, merge joins和hash joins)  優化聯接操作

merge joins是集合操作  nested loops和hash joins是記錄操作返回第一批記錄迅速

merge joins的操作適用於批處理操作,巨大表 和遠端查詢

1全表掃瞄  --〉 2排序   --〉3比較和合併  效能開銷主要在前兩步

適用全表掃瞄的情形,都適用merge joins操作(比nested loops有效)。

改善1的效率: 優化i/o, 提高使用oracle多塊讀的能力, 使用並行查詢的選項

改善1的效率:提高sort_area_size的值, 使用sort direct writes,為臨時段提供專用表空間

4 管理包含檢視的sql語句

優化器執行包含檢視的sql語句有兩種方法:

-          先執行檢視,完成全部的結果集,然後用其餘的查詢條件作過濾器執行查詢

-          將視**本整合到查詢裡去

含有group by子句的檢視不能被整合到乙個大的查詢中去。

在檢視中使用union,不阻止檢視的sql整合到查詢的語法中去。

5 優化子查詢

6 使用復合keys/star查詢

7 恰當地索引connect by操作

8 限制對遠端表的訪問

9 管理非常巨大的表的訪問

-          管理資料接近(proximity) 記錄在表中的存放按對錶的範圍掃瞄中最長使用的列排序 按次序儲存資料有助於範圍掃瞄,尤其是對大表。

-          避免沒有幫助的索引掃瞄 當返回的資料集合較大時,使用索引對sga的資料塊快取占用較大,影響其他使用者;全表掃瞄還能從oracle的多塊讀取機制和「一致性獲取/每塊」特性中受益。

-          建立充分索引的表  使訪問索引能夠讀取較全面的資料  建立僅主列不同的多個索引

-          建立hash簇

-          建立分割表和檢視

-          使用並行選項

10 使用union all 而不是union

union all操作不包括sort unique操作,第一行檢索的響應速度快,多數情況下不用臨時段完成操作,

union all建立的檢視用在查詢裡可以整合到查詢的語法中去,提高效率

11 避免在sql裡使用pl/sql功能呼叫

12 繫結變數(bind variable)的使用管理

使用bind variable和execute using方式

將like :name ||』%』 改寫成 between :name and :name || char(225), 已避免進行全表掃瞄,而是使用索引。

13 回訪優化程序

資料變化後,重新考察優化情況

SQL調優之八 關於SQL調優

sql調優是指對未達到預期的sql語句進行診斷和修復 sql調優是乙個反覆的過程,是一步一步的將sql語句的效能提公升到預期的目標。它是對乙個已經實施完成了的應用的問題的解決,相反的,應用設計則是在實施之前,就應該已經設定好了安全和效能的目標。一次典型的調優過程,需要達到以下的其中乙個目的 相對的,...

SQL調優命令

命令工具 oracle sql plus 或者cmd sqlplus mmsuser agooy8tt xian 133 64 46 26 是 set autotrace off 不產生autotrace報告,預設設定,查詢按常規執行。set autotrace on statistics 查詢按常...

sql效能調優

基本原則 1.避免全表搜尋 2.建立索引 3.盡量避免向客戶端返回大量資料,若資料量大,考慮要求是否合理 4.盡量避免大事務操作,提高系統併發能力 5.盡量避免使用游標,因為效率差 關於where條件 1.盡量避免在where條件使用!或 操作符,否則引擎將放棄使用索引而全表搜尋 2.盡量避免在wh...