13個SQL優化技巧

2021-06-28 21:51:31 字數 2633 閱讀 4630

避免無計畫的全表掃瞄

如下情況進行全表掃瞄: -

該錶無索引 -

對返回的行無任何限制條件(無

where

子句)

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

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

對索引主列的限制條件是

is (not) null或!=

-對索引主列的限制條件是

like

操作且值是乙個

bind variable或%

打頭的值

只使用選擇性索引

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

1.0。

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

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

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

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

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

考慮選擇性

考慮讀取索引的次數

考慮and-equal操作

管理多表連線(

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

,為臨時段提供專用表空間

管理包含檢視的

sql語句

優化器執行包含檢視的

sql語句有兩種方法: -

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

將視**本整合到查詢裡去 含有

group by

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

在檢視中使用

union

,不阻止檢視的

sql整合到查詢的語法中去。

優化子查詢

使用復合

keys/star

查詢

恰當地索引

connect by

操作

限制對遠端表的訪問

管理非常巨大的表的訪問

-管理資料接近

(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 variable或 打頭的...

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...