Mysql語句優化建議

2022-03-23 23:23:15 字數 1367 閱讀 7251

一、建立索引

1)考慮在 where 及 order by 涉及的列上建立索引

2)對於模糊查詢, 建立全文索引

3)對於多主鍵查詢,建立組合索引

二、避免陷阱

然而,一些情況下可能使索引無效:

1)在 where 子句中對字段進行表示式操作

2)在 where 子句中使用 or 來連線條件,如:

select id from t where num=

10or num=

20

可以改為

select id from t where num=

10union

allselect id from t where num=

20

3)在 where 子句中的「=」左邊進行表示式運算(可能導致無法正確使用索引)

4)在where 子句中使用引數,如:

select id from t where num=

@num

可以改為(強制使用索引):

select id from t with(index(索引名)) where num=

@num

5)如果該索引是組合索引,那麼必須使用到該索引中的第乙個字段作為查詢條件, 而且盡可能讓字段順序與索引順序一致

6)並不是所有索引對查詢都有效,sql是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引

三、語句優化建議

1)慎用in 和 not in, 如:

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

可以替代為:

select id from t where num between

1and

3

2)用具體字段代替*

3)少用varchar、 text、blob型別

4)字段表示固定值, 使用enum型別代替varchar(內部使用tinyint)

5)盡可能的使用 varchar/nvarchar 代替 char/nchar (變長字段儲存空間小,節省儲存空間,對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些)

6)如果型別不限制, 用int代替varchar(字串乙個個被匹配, 而數值則一次被處理)

7)避免頻繁建立和刪除臨時表,以減少系統表資源的消耗

8)避免頻繁建立和刪除臨時表,以減少系統表資源的消耗

9)盡量避免大事務操作,提高系統併發能力

四、使用工具

1)任何優化都是基於資料基礎的。

2)比較語句執行時間, 必要時使用explain來跟蹤查詢情況

sql語句優化建議

1.不論乙個sql中涉及到多少表,每次都用兩個表 結果集 操作,得到新的結果後,再和下乙個表 結果集 操作。2.避免在select f1,select f2 from tableb from tablea 這樣得到欄位列。直接用tablea和tableb關聯得到a.f1,b.f2就可以了。3.避免隱...

mysql優化建議

1.建立 2.sql編寫mysql欄位型別 資料型別 含義date 3位元組,日期,格式 2014 09 18 time 3位元組,時間,格式 08 42 30 datetime 8位元組,日期時間,格式 2014 09 18 08 42 30 timestamp 4位元組,自動儲存記錄修改的時間 ...

MySQL優化建議

設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來決定字...