mysql的優化方式

2021-08-19 08:38:31 字數 2575 閱讀 8657

1、查詢語句時任何時候都不要使用select * 語句,

用具體的字段列表代替「*」,不要返回用不到的任何字段。

2、需要經常查詢的字段設定索引,索引會導致插入更新變慢,因為需要額外維護索引表,但是查詢會快的多。

對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引,但

乙個表的索引數最好不要超過6個

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

select id from t where num is null

可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:

select id from t where num=0

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)

對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

6、下面的查詢也將導致全表掃瞄:

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

可以考慮全文檢索框架來實現功能如es

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

select id from t where num/2=100

應改為:

select id from t where num=100*2

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

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

應改為:

select id from t where name like 'abc%'

9、不要在 where 子句中的「=」左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引。

10、很多時候用 exists 代替 in 是乙個好的選擇:

select num from a where num in(select num from b)

用下面的語句替換:

select num from a where exists(select 1 from b where num=a.num)

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

如一表中有字段***,male、female幾乎各一半,那麼即使在***上建了索引也對查詢效率起不了作用。

12、盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。

這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了。

13、盡可能的使用 varchar 代替 char ,因為首先變長字段儲存空間小,可以節省儲存空間,

其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些。

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

15、主表過大時考慮使用「臨時表」暫存中間結果

簡化sql語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程式中多次掃瞄主表,也大大減少了程式執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了併發效能。

16、查詢語句包含and語句時,應該將過濾數較多的條件放到前面,因為查詢條件是一條一條執行,資料量越少後面的過濾越快

17、插入值很多時使用批量插入,

這種方式將大大縮減客戶端與資料庫之間的連線、關閉等消耗,使得效率比分開執行的單個 insert 語句快(在一些情況中幾倍)

insert

into

test

values

(1

,2

),(1

,3

),(1

,4

)...

18、使用讀寫分離,寫入操作傳送到主庫,讀取操作傳送到從庫,主從之間自動同步,從而將讀取與寫入壓力分離

19、根據業務對資料進行分庫分表操作,如不同的業務,不同時間段進行分割,但是這種方式會增加業務層難度

20、資料量擴大時考慮使用分布式資料庫,分布式資料庫可以很方便橫向擴充套件是專為大資料而生,如hbase

mysql優化方式

在mysql中有乙個專門負責優化select語句的優化器模組,其主要功能是通過計算分析系統中收集的各種統計資訊,為客戶端請求的query給出最優的執行計畫。1 優化更需要優化的query 高併發低消耗的query對整個系統的影響高於低併發高消耗的大。所以先優化高併發低消耗的query 2 永遠用小結...

mysql優化查詢的方式

一 假設有三張表 room id 1 2.1000user id1 10000 booking user id room id time id date 1 1 8 00 2017 11 11 1 2 8 00 2017 11 11 1 3 8 00 2017 11 11 1 4 8 00 2017...

mysql的優化 MySQL優化

一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...