SQL優化口訣

2021-09-05 19:33:28 字數 2142 閱讀 9409

1、避免在where子句中使用 is null 或 is not null 對欄位進行判斷。

如:select id from table where name is null

在這個查詢中,就算我們為 name 字段設定了索引,查詢分析器也不會使用,因此查詢效率底下。為了避免這樣的查詢,在資料庫設計的時候,盡量將可能會出現 null 值的字段設定預設值,這裡如果我們將 name 欄位的預設值設定為0,那麼我們就可以這樣查詢:

select id from table where name = 0

2、避免在 where 子句中使用 != 或 <> 操作符。

如:select name from table where id <> 0

資料庫在查詢時,對 != 或 <> 操作符不會使用索引,而對於 < 、 <= 、 = 、 > 、 >= 、 between and,資料庫才會使用索引。因此對於上面的查詢,正確寫法應該是:

select name from table where id < 0

union all

select name from table where id > 0

這裡我們為什麼沒有使用 or 來鏈結 where 後的兩個條件呢?這就是我們下面要說的第3個優化技巧。

3、避免在 where 子句中使用 or來鏈結條件。

如:select id from tabel where name = 『uncletoo』 or name = 『php』

這種情況,我們可以這樣寫:

select id from tabel where name = 『uncletoo』

union all

select id from tabel where name = 『php』

4、少用 in 或 not in。

雖然對於 in 的條件會使用索引,不會全表掃瞄,但是在某些特定的情況,使用其他方法也許效果更好。如:

select name from tabel where id in(1,2,3,4,5)

像這種連續的數值,我們可以使用 between and,如:

select name from tabel where id between 1 and 5

5、注意 like 中萬用字元的使用。

下面的語句會導致全表掃瞄,盡量少用。如:

select id from tabel where name like』%uncletoo%』

或者select id from tabel where name like』%uncletoo』

而下面的語句執行效率要快的多,因為它使用了索引:

select id from tabel where name like』uncletoo%』

6、避免在 where 子句中對字段進行表示式操作。

如:select name from table where id/2 = 100

正確的寫法應該是:

select name from table where id = 100*2

7、避免在 where 子句中對字段進行函式操作。

如:select id from table where substring(name,1,8) = 『uncletoo』

或select id from table where datediff(day,datefield,『2014-07-17』) >= 0

這兩條語句中都對字段進行了函式處理,這樣就是的查詢分析器放棄了索引的使用。正確的寫法是這樣的:

select id from table where name like』uncletoo%』

或select id from table where datefield <= 『2014-07-17』

也就是說,不要在 where 子句中的 = 左邊進行函式、算術運算或其他表示式運算。

8、在子查詢中,用 exists 代替 in 是乙個好的選擇。

如:select name from a where id in(select id from b)

如果我們將這條語句換成下面的寫法:

select name from a where exists(select 1 from b where id = a.id)

這樣,查詢出來的結果一樣,但是下面這條語句查詢的速度要快的多。

原文:

MySQL查詢優化的口訣

全值匹配我最愛,最左字首要遵守 帶頭大哥不能死,中間兄弟不能斷 索引列上少計算,範圍之後全失效 like百分寫最後,覆蓋索引不寫星 不等空值還有or,索引失效要少用。使用in查詢的時候,其實是範圍查詢,如果查詢列是索引列則explain的結果是range型別group by操作會先排序然後再分組,如...

oracle 九九乘法口訣 SQL

oracle 中 set serveroutput on 的作用是開啟系統預設設定的輸出功能,預設是關閉的。一般開發人員在使用pl sql軟體時,需要輸出結果,就可以在命令列輸入該指令。使用set serveroutput on 命令設定環境變數serveroutput為開啟狀態,從而使得pl sq...

查詢優化 SQL優化

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