SQL語句優化

2021-10-04 19:53:33 字數 1987 閱讀 1773

sql優化的具體操作:

盡量避免使用select*,返回無用的字段會降低查詢效率。如下:

select

*from t

優化方式:使用具體的字段代替*,只返回使用到的字段。

在表中建立索引,優先考慮where、group by使用到的字段。

盡量避免使用in 和not in,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select \*

from t where id in(2

,3)select \*

from t1 where username in

(select username from t2)

優化方式:如果是連續數值,可以用between代替。如下:

select \*

from t where id between

2and

3

如果是子查詢,可以用exists代替。如下:

select

*from t1 where

exists

(select \*

from t2 where t1.username = t2.username)

盡量避免使用or,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select

*from t where id =

1or id =

3

優化方式:可以用union代替or。如下:

select

*from t where id =

1union

select

*from t where id =

3

(ps:如果or兩邊的字段是同乙個,如例子中這樣。貌似兩種方式效率差不多,即使union掃瞄的是索引,or掃瞄的是全表)

盡量避免在字段開頭模糊查詢,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select

*from t where username like

'%li%'

優化方式:盡量在字段後面使用模糊查詢。如下:

select

*from t where username like

'li%'

盡量避免進行null值的判斷,會導致資料庫引擎放棄索引進行全表掃瞄。如下

select

*from t where score is

null

優化方式:可以給字段新增預設值0,對0值進行判斷。如下:

select

*from t where score =

0

盡量避免在where條件中等號的左側進行表示式、函式操作,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select

*from t2 where score/10=

9select

*from t2 where substr(username,1,

2)='li'

優化方式:可以將表示式、函式操作移動到等號右側。如下:

select

*from t2 where score =10*

9select

*from t2 where username like

'li%'

當資料量大時,避免使用where 1=1的條件。通常為了方便拼裝查詢條件,我們會預設使用該條件,資料庫引擎會放棄索引進行全表掃瞄。如下:

select

*from t where1=

1

優化方式:用**拼裝sql時進行判斷,沒where加where,有where加and。

SQL 語句優化 OR 語句優化案例

從上海來到溫州,看了前幾天監控的sql語句和資料變化,發現有一條語句的io次數很大,達到了150萬次io,而兩個表的資料也就不到20萬,為何有如此多的io次數,下面是執行語句 select ws.nodeid,wi.laststepid,wi.curstepid from workflowinfo ...

sql語句優化!

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

SQL語句優化

explain sql 反饋sql語句執行資訊 1 優化 select min id as nid,uid pmzongfen updatetime picid gg from qd mouldu qd sell limit 1 select uid pmzongfen updatetime pic...