13個SQL優化技巧

2022-01-22 15:33:59 字數 1804 閱讀 1331

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回訪優化程序

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

13個SQL優化技巧

1 避免無計畫的全表掃瞄 如下情況進行全表掃瞄 該錶無索引 對返回的行無任何限制條件 無 where 子句 對於索引主列 索引的第一列 無限制條件 對索引主列的條件含在表示式中 對索引主列的限制條件是 is not null或 對索引主列的限制條件是 like 操作且值是乙個 bind variab...

sql優化技巧

1.比較運算子能用 就不用 增加了索引的使用機率 2.事先知道只有一條查詢結果時,使用 limit 1 limit 1 可以避免全表掃瞄,找到對應結果就不會再繼續掃瞄了 3.選擇合適的資料型別很重要 能用tinyint就不用smallint,能用smallint就不用int,磁碟和記憶體消耗越小越好...

8個SQL語句常用優化技巧

要提高sql語句的執行效率,最常見的方法就是建立索引,以及盡量避免全表掃瞄。在本章mysql教程中,uncletoo給大家整理一些常見的sql優化技巧,避免全表掃瞄。乙個簡單的優化,也許能讓你的sql執行效率提高幾倍,甚至幾十倍。1 避免在where子句中使用 is null 或 is not nu...