sql優(yōu)化的幾種方法

sql優(yōu)化的幾種方法

1.對查詢進行優(yōu)化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。

2.應盡量避免在 where 子句中對字段進行 NULL 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:

select?id?from?t?where?num?is?null

可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:

select?id?from?t?where?num=0

3.應盡量避免在 where 子句中使用!=或操作符,否則將引擎放棄使用索引而進行全表掃描。

4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:

select?id?from?t?where?num=10?or?num=20

可以這樣查詢:

select?id?from?t?where?num=10 union?all select?id?from?t?where?num=20

5.in 和 not in 也要慎用,否則會導致全表掃描,如:

select?id?from?t?where?num?in(1,2,3)

對于連續(xù)的數(shù)值,能用 between 就不要用 in 了:

select?id?from?t?where?num?between?1?and?3

6.下面的查詢也將導致全表掃描:

select?id?from?t?where?name?like?'%abc%'

7.應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。如:

select?id?from?t?where?num/2=100

應改為:

select?id?from?t?where?num=100*2

8.應盡量避免在where子句中對字段進行函數(shù)操作,這將導致引擎放棄使用索引而進行全表掃描。如:

select?id?from?t?where?substring(name,1,3)='abc'--name以abc開頭的id

應改為:

select?id?from?t?where?name?like?'abc%'

9.不要在 where 子句中的“=”左邊進行函數(shù)、算術運算或其他表達式運算,否則系統(tǒng)將可能無法正確使用索引。

10.在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統(tǒng)使用該索引,

否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。

11.不要寫一些沒有意義的查詢,如需要生成一個空表結構:

select?col1,col2?into?#t?from?t?where?1=0

這類代碼不會返回任何結果集,但是會消耗系統(tǒng)資源的,應改成這樣:

create?table?#t(...)

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享