mysql語句優化原則

2021-10-02 13:25:05 字數 2719 閱讀 5403

有時候發現資料量大的時候查詢起來效率就比較慢了,學習一下mysql語句優化的原則,自己在正常寫sql的時候還沒注意到這些,先記錄下來,慢慢一點一點的學,加油!

這幾篇部落格寫的都可以:

使用索引的原則:

1.最左字首匹配原則。

mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配。所以要盡量把「=」條件放在前面,把這些條件放在最後。

不會用到b的索引:

where a=1 and c>0 and b=2

會用到b的索引:

where a=1 and b=2 and c>0

2.盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示欄位不重複的比例,比例越大我們掃瞄的記錄數越少。

3.當取出的資料超過全表資料的20%時,不會使用索引。

4.使用like時注意:

不使用索引:

like 『%l%』

使用索引:

like 『l%』

5.盡量將or 轉換為 union all

不使用索引:

select * from user where name=』a』 or age=』20』

使用索引:

select * from user where name=』a』 union all select * from user where age=』20』

6.欄位加函式不會使用索引。所以盡量把函式放在數值上

不使用索引:

where truncate(price) = 1

使用索引:

where price > 1 and price < 2

7.如果使用數字作為字元,則數字需要加引號,否則mysql會自動在列上加資料型別轉換函式

不使用索引

where mobile=18534874321

使用索引

where mobile=』18534874321』

8.欄位加運算子不會使用索引。所以盡量把運算放在數值上

不使用索引:

select account_name, amount from transaction where amount + 3000 >5000;

使用索引:

select account_name, amount from transaction where amount > 2000 ;

9.使用組合索引時,必須要包括第乙個列。

例如alter table test add index(a,b,c):

不使用索引:

where b=1, c=2

where b=1

where c=2

使用索引:

where a=1, b=1, c=2

where a=1, b=1

where a=1, c=2

10.盡量避免使用is null或is not null

不使用索引:

select … from department where dept_code is not null;

使用索引:

select … from department where dept_code >0;

11.不等於(!=)不會使用索引

不使用索引:

select account_name from transaction where amount !=0;

使用索引:

select account_name from transaction where amount >0;

12.order by 子句只在以下的條件下使用索引:

order by中所有的列必須包含在相同的索引中並保持在索引中的排列順序.

order by中不能既有asc也有desc

例如:alter table t1 add index(a,b);

alter table t1 add index(c);

不使用索引:

select * from t1 order by a,c; 不在乙個索引中

select * from t1 order by b; 沒有出現組合索引的第一列

select * from t1 order by a asc, b desc; 混合asc和desc

select * from t1 where a=1 order by c; where和order by用的不是同乙個索引,where使用索引,order by不使用。

使用索引:

select * from t1 order by a,b;

select * from t1 order where a=1 order by b;

select * from t1 order where a=1 order by a,b;

select * from t1 order by a desc, b desc;

select * from t1 where c=1 order by c;

13.索引不是越多越好。mysql需要資源來維護索引,任何資料的變更(增刪改)都會連帶修改索引的值。所以,需要平衡考慮索引帶來的查詢加速和增刪改減速。

其他注意事項

1.盡量避免使用select *

2.盡量使用表連線(join)代替子查詢select * from t1 where a in (select b from t2)

3.效能方面,表連線 > (not) exists > (not) in

mysql語句優化原則 MySQL語句優化的原則

1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,可考慮建立群集索引 b.經常同...

mysql語句優化原則 mysql語句優化原則

有時候發現資料量大的時候查詢起來效率就比較慢了,學習一下mysql語句優化的原則,自己在正常寫sql的時候還沒注意到這些,先記錄下來,慢慢一點一點的學,加油!這幾篇部落格寫的都可以 使用索引的原則 1.最左字首匹配原則。mysql會一直向右匹配直到遇到範圍查詢 不會用到b的索引 where a 1 ...

mysql語句優化原則 MySQL語句優化的原則

mysql語句優化的原則 mysql語句優化的原則 1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by gr...