SQL優化手札

2021-08-17 19:18:24 字數 1076 閱讀 1841

某個專案中,編寫了大量的sql指令碼,在資料庫伺服器上執行,而資料庫中的資料量巨大,sql執行過程太慢,因此考慮先從sql指令碼上動刀優化。

sql優化的實質就是在結果正確的前提下,用優化器可以識別的語句,充分利用索引,減少表掃瞄的i/o次數,盡量避免表搜尋的發生。

(來自:

1. where條件中的』in』在邏輯上相當於』or』,不如將or子句分開

例如:

select

count(*) from stuff where id_no in('0','1')(23秒)

建議改為:

select

count(*) from stuff where id_no='0'

select

count(*) from stuff where id_no='1'(3秒)

2. 使用恰當的表連線方式

當使用left join時,無論on的條件是否滿足,都會返回左表的所有記錄,對於滿足的條件的記錄,兩個表對應的記錄會連線起來,對於不滿足條件的記錄,那右表字段全部是null;

當使用right join時,類似,只不過是全部返回右表的所有記錄

當使用inner join時,功能與where完全相同。

3. union和union all效率的區別

union和union all關鍵字都是將兩個結果集合並為乙個,但這兩者從使用和效率上來說都有所不同。

union在進行表鏈結後會篩選掉重複的記錄,所以在表鏈結後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。

而union all只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。

從效率上說,union all 要比union快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用union all

4. 避免使用distinct

Oracle學習手札

ps 以後會陸續增加oracle常用sql語句。不定期更新中.1.union 和union all使用方法 說明 union all將兩個表進行合併,而且要滿足兩個條件 要有互相匹配的字段型別和字段個數要相同。個人理解 互相匹配的字段型別 是指查詢兩個表中型別相同且值一致的資料給合併,並且不能是va...

查詢優化 SQL優化

查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...

SQL優化 索引優化

一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...