mysql 深入優化 Mysql的深入優化

2021-10-17 12:30:34 字數 1906 閱讀 7781

ok,廢話不多說,上乾貨。

調優思路:

• 0.硬體優化

• 1.資料庫設計與規劃--以後再修改很麻煩,估計資料量,使用什麼儲存引擎

• 2.資料的應用--怎樣取資料,sql 語句的優化

• 3.磁碟 io 優化

• 4.mysql 服務優化--記憶體的使用,磁碟的使用

• 5.my.cnf 內引數的優化。

0.硬體優化

cpu—— 64 位、高主頻、高快取,高並行處理能力

記憶體——大記憶體、主頻高,盡量不要用swap

硬碟——15000轉、raid5、raid10 。ssd

網路——標配的千兆網絡卡,10g網絡卡,bond0,msyql伺服器盡可能和使用它的web伺服器在同一區域網內,盡量避免諸如防火牆策略等不必要的開銷。

1.資料庫設計與規劃(架構上的優化)

縱向拆解: 專機專用

橫向拆解: 主從同步、負載均衡、高可用性集群,當單個 mysql 資料庫無法滿足日益增加的需求時,可以考慮在資料庫這個邏輯層面增加多台伺服器,以達到穩定、高效的效果。

2、查詢優化

a>建表時表結構要合理,每個表不宜過大;在任何情況下均應使用最精確的型別。例如,如果id列用int是乙個好主意,而用text型別則是個蠢辦法;time列酌情使用date或者datetime。

b>索引,建立合適的索引。

c>查詢時儘量減少邏輯運算(與運算、或運算、大於小於某值的運算);

d>減少不當的查詢語句,不要查詢應用中不需要的列,比如說select * from 等操作。

e>減小事務包的大小;

f>將多個小的查詢適當合併成乙個大的查詢,減少每次建立/關閉查詢時的開銷;

g>將某些過於複雜的查詢拆解成多個小查詢,和上一條恰好相反

h>建立和優化儲存過程來代替大量的外部程式互動。

3,磁碟io 規劃,io相關的技術

raid 技術:raid0或raid10

4. mysql 服務優化(資料庫服務的優化)

保持每個表都不要太大,可以對大表做橫切和縱切:比如說我要取得某 id 的 lastlogin, 完全可以做一張只有「id和 「lastlog」的小表,而非幾

十、幾百列資料的併排大表。

另外對乙個有 1000 萬條記錄的表做更新比對 10 個 100 萬記錄的表做更新一般來的要慢

儲存引擎:

myisam 引擎,表級鎖,表級鎖開銷小,影響範圍大,適合讀多寫少的表,不支援事物。 表鎖定不存在死鎖

innodb 引擎,行級鎖,鎖定行的開銷要比鎖定全表要大。影響範圍小,適合寫操作比較頻繁的資料表。行級鎖可能存在死鎖。

5. my.cnf 內引數的優化

對查詢進行快取,一般大致查詢都是如此:php發出查詢請求->資料庫收到指令對查詢語句進行分析->確定如何查詢->從磁碟中載入資訊->返回結果

配置查詢快取:

vim /etc/my.cnf 新增:

[mysqld] #在此字段中新增

query_cache_size = 32m

可以在資料庫中檢視快取:

show status like 'qcache%';

強制限制mysql 資源設定

您可以在mysqld中強制一些限制來確保系統負載不會導致資源耗盡的情況出現。

在配置檔案中新增:

max_connections=500

wait_timeout=10

max_connect_errors = 100

在資料庫中用此命令就行驗證:show status like 'max_used_connections';

mysql呢,有太多的調節優化,我們要記住那麼多會很吃力,也沒有多大意義。其實,只要記住一部分就可以完全滿足要求。今天我就寫這麼多了,這些基本的優化可以解決一部分問題,如果資料很大,就需要做一些集群保證更好的使用者體驗(讀寫分離,高可用,搭建快取資料庫)

深入MySQL優化 索引優化

查詢category id為1且comments大於1的情況下,views最多的article id explain select id,author id from article where category id 1and comments 1order by views limit 1 ex...

深入MySQL優化 索引失效

最佳左字首法則 所謂的最佳左字首法則就是查詢時使用到的字段順序需要滿足建立索引時的字段順序。看下面的栗子 在staffs表上,建立 name,age.pos 的索引 可以看到在index表上,name,age,pos的seq in indexx是按照建立索引時的順序從小到大的,即name age p...

mysql的優化 MySQL優化

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