MySQL資料庫優化技巧大全

2021-10-07 19:48:17 字數 2441 閱讀 9707

mysql優化三大方向

① 優化mysql所在伺服器核心(此優化一般由運維人員完成)。

② 對mysql配置引數進行優化(my.cnf)此優化需要進行壓力測試來進行引數調整。

③ 對sql語句以及表優化。

mysql引數優化

1:mysql 預設的最大連線數為 100,可以在 mysql 客戶端使用以下命令檢視

mysql> show variables like 'max_connections';

2:檢視當前訪問mysql的執行緒

mysql> show processlist;

3:設定最大連線數

mysql>set globle max_connections = 5000;

最大可設定16384,超過沒用

4:檢視當前被使用的connections

mysql>show globle status like 'max_user_connections'

申請阿里雲服務時,可以使用2000元阿里雲代金券,阿里雲官網領取**: (長期有效)

對mysql語句效能優化的16條經驗

① 為查詢快取優化查詢

② explain 我們的select查詢(可以檢視執行的行數)

③ 當只要一行資料時使用limit 1

④ 為搜尋字段建立索引

⑤ 在join表的時候使用相當型別的列,並將其索引

⑥ 千萬不要 order by rand ()

⑦ 避免select *

⑧ 永遠為每張表設定乙個id

⑨ 可以使用enum 而不要varchar

⑩ 盡可能的使用not null

⑪ 固定長度的表會更快

⑫ 垂直分割

⑬ 拆分打的delete或insert語句

⑭ 越小的列會越快

⑮ 選擇正確的儲存引擎

⑯ 小心 "永久鏈結"

具體描述如下:

(一) 使用查詢快取優化查詢

大多數的mysql伺服器都開啟了查詢快取。這是提高效能最有效的方法之一,而且這是被mysql引擎處理的。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放入乙個快取中,這樣後續的相同查詢就不用操作而直接訪問快取結果了。

這裡最主要的問題是,對於我們程式設計師來說,這個事情是很容易被忽略的。因為我們某些查詢語句會讓mysql不使用快取,示例如下:

1:select username from user where signup_date >= curdate()

2:select username from user where signup_date >= '2014-06-24『

上面兩條sql語句的差別就是 curdate() ,mysql的查詢快取對這個函式不起作用。所以,像 now() 和 rand() 或是其它的諸如此類的sql函式都不會開啟查詢快取,因為這些函式的返回是會不定的易變的。所以,你所需要的就是用乙個變數來代替mysql的函式,從而開啟快取。

(二) 使用explain關鍵字檢測查詢

使用explain關鍵字可以使我們知道mysql是如何處理sql語句的,這樣可以幫助我們分析我們的查詢語句或是表結構的效能瓶頸;explain的查詢結果還會告訴我們索引主鍵是如何被利用的,資料表是如何被被搜尋或排序的....等等。語法格式是:explain +select語句;

abc三個索引都在where條件裡面用到了,而且都發揮了作用

(1) select * from mytable where c=4 and b=6 and a=3;

這條語句為了說明 組合索引與在sql中的位置先後無關,where裡面的條件順序在查詢之前會被mysql自動優化,效果跟上一句一樣

(2) select * from mytable where a=3 and c=7;

a用到索引,b沒有用,所以c是沒有用到索引效果的

(3) select * from mytable where a=3 and b>7 and c=3;

a用到了,b也用到了,c沒有用到,這個地方b是範圍值,也算斷點,只不過自身用到了索引

(4) select * from mytable where b=3 and c=4;

因為a索引沒有使用,所以這裡 bc都沒有用上索引效果

(5) select * from mytable where a>4 and b=7 and c=9;

a用到了 b沒有使用,c沒有使用

(6) select * from mytable where a=3 order by b;

a用到了索引,b在結果排序中也用到了索引的效果,前面說了,a下面任意一段的b是排好序的

(7) select * from mytable where a=3 order by c;

a用到了索引,但是這個地方c沒有發揮排序效果,因為中間斷點了,使用 explain 可以看到 filesort

(8) select * from mytable where b=3 order by a;

MySQL資料庫優化技巧

在5.5之後預設的儲存引擎是innodb 可以單獨進行修改也可以在建立表時修改 alter table tab name engine innodb 十六 小心永久鏈結 永久鏈結 的目的是用來減少重新建立mysql鏈結的次數。當乙個鏈結被建立了,它會永遠處在連線的狀態,就算是資料庫操作已經結束了。而...

資料庫查詢優化技巧 MySQL

在資料庫程式的開發中,效能是最讓人關心和擔心的問題之一,而影響到其效能的乙個關鍵因素就是查詢效率,往往查詢效率的瓶頸都集中在大量耗時的sql語句上。以下就將列舉一些mysql中行之有效的查詢優化手法和準則 1.只要能滿足你的需求,應盡可能使用更小的資料型別 例如使用mediumint代替int。2....

MySQL語法大全(5)資料庫優化

資料庫優化1.開啟快取,盡量使用php函式而不是mysql2.explain select 語句可以知道效能3.一行資料使用 limit1 4.為搜尋字段重建索引 比如關鍵字 標籤5.表連線join保證字段型別相同並且有其索引6.隨機查詢使用php r mysql query select coun...