mysql 優化策略 mysql的優化策略有哪些

2021-10-18 17:20:23 字數 2224 閱讀 6019

第一:優化你的sql和索引;

1.善用explain,看看自己寫的sql到底要涉及到多少表,多少行,使用了那些索引,根據這些資訊適當的建立索引;

2.善用不同的儲存引擎,mysql有多種不同的儲存引擎,innodb,aria,memory根據需要給不同的表選擇不同的儲存引擎,比如要支援transaction的話用innodb等;

3、 適當建立索引,在頻繁作為檢索條件,更新較少的字段上建立索引,以提高查詢速度。

第二:加快取,memcached,redis;

第三:做主從複製或主主複製,讀寫分離,可以在應用層做,效率高,也可以用三方工具,第三方工具推薦360的atlas,其它的要麼效率不高,要麼沒人維護;

第四如果以上都做了還是慢,不要想著去做切分,mysql自帶分割槽表,先試試這個,對你的應用是透明的,無需更改**,但是sql語句是需要針對分割槽表做優化的,sql條件中要帶上分割槽條件的列,從而使查詢定位到少量的分割槽上,否則就會掃瞄全部分割槽,另外分割槽表還有一些坑,在這裡就不多說了;

第五:那就先做垂直拆分,其實就是根據你模組的耦合度,將乙個大的系統分為多個小的系統,也就是分布式系統;

第六:是水平切分,針對資料量大的表,這一步最麻煩,最能考驗技術水平,要選擇乙個合理的sharding key,為了有好的查詢效率,表結構也要改動,做一定的冗餘,應用也要改,sql中盡量帶sharding key,將資料定位到限定的表上去查,而不是掃瞄全部的表;mysql資料庫一般都是按照這個步驟去演化的,成本也是由低到高;

19條規則摘要如下:

規則1:一般情況可以選擇myisam儲存引擎,如果需要事務支援必須使用innodb儲存引擎。

規則2:命名規則。

規則3:資料庫字段型別定義經常需要計算和排序等消耗cpu的字段,應該盡量選擇更為迅速的字段,如用timestamp(4個位元組,最小值1970-01-01 00:00:00)代替datetime(8個位元組,最小值1001-01-01 00:00:00),通過整型替代浮點型和字元型變長字段使用varchar,不要使用char對於二進位制多**資料,流水佇列資料(如日誌),超大文字資料不要放在資料庫欄位中

規則4:業務邏輯執行過程必須讀到的表中必須要有初始的值。避免業務讀出為負或無窮大的值導致程式失敗規則5:並不需要一定遵守正規化理論,適度的冗餘,讓query儘量減少join

規則6:訪問頻率較低的大字段拆分出資料表。有些大字段占用空間多,訪問頻率較其他字段明顯要少很多,這種情況進行拆分,頻繁的查詢中就不需要讀取大字段,造成io資源的浪費。

規則7:大表可以考慮水平拆分。大表影響查詢效率,根據業務特性有很多拆分方式,像根據時間遞增的資料,可以根據時間來分。以id劃分的資料,可根據id%資料庫個數的方式來拆分。

一.資料庫索引

規則8:業務需要的相關索引是根據實際的設計所構造sql語句的where條件來確定的,業務不需要的不要建索引,不允許在聯合索引(或主鍵)中存在多於的字段。特別是該字段根本不會在條件語句**現。

規則9:唯一確定一條記錄的乙個欄位或多個欄位要建立主鍵或者唯一索引,不能唯一確定一條記錄,為了提高查詢效率建普通索引

規則10:業務使用的表,有些記錄數很少,甚至只有一條記錄,為了約束的需要,也要建立索引或者設定主鍵。

規則11:對於取值不能重複,經常作為查詢條件的字段,應該建唯一索引(主鍵預設唯一索引),並且將查詢條件中該字段的條件置於第乙個位置。沒有必要再建立與該字段有關的聯合索引。

規則12:對於經常查詢的字段,其值不唯一,也應該考慮建立普通索引,查詢語句中該字段條件置於第乙個位置,對聯合索引處理的方法同樣。

規則13:業務通過不唯一索引訪問資料時,需要考慮通過該索引值返回的記錄稠密度,原則上可能的稠密度最大不能高於0.2,如果稠密度太大,則不合適建立索引了。

規則14:需要聯合索引(或聯合主鍵)的資料庫要注意索引的順序。sql語句中的匹配條件也要跟索引的順序保持一致。注意:索引的順勢不正確也可能導致嚴重的後果。

規則15:表中的多個字段查詢作為查詢條件,不含有其他索引,並且字段聯合值不重複,可以在這多個欄位上建唯一的聯合索引,假設索引欄位為 (a1,a2,…an),則查詢條件(a1 op val1,a2 op val2,…am op valm)m<=n,可以用到索引,查詢條件中字段的位置與索引中的字段位置是一致的。

規則16:聯合索引的建立原則(以下均假設在資料庫表的字段a,b,c上建立聯合索引(a,b,c))

規則17:重要業務訪問資料表時。但不能通過索引訪問資料時,應該確保順序訪問的記錄數目是有限的,原則上不得多於10.

二.query語句與應用系統優化

規則18:合理構造query語句

規則19:應用系統的優化

Mysql的優化策略

避免使用null值判斷 一般來說,使用null值判斷時,一般都是全表檢索,但是有例外,覆蓋索引時索引會生效。盡量使用索引 在where條件列或者order by 等涉及的列上加上索引,能夠有效地避免全表掃瞄,縮小查詢範圍,加快資料檢索的速度。最佳左字首原則 出現聯合索引時,必須聯合索引中的第乙個字段...

mysql查詢優化策略

優化查詢 使用explain語句分析查詢語句 explain 用來分析 select 查詢語句,開發人員可以通過分析 explain 結果來優化查詢語句。通過對查詢語句的分析,可以了解查詢語句的執 況,找出查詢語句執行的瓶頸,從而優化查詢語句.使用索引查詢 mysql中提高效能的乙個最有效的方式就是...

Mysql優化策略(推薦)

總的來說 www.cppcns.com 設計表的時候 索引 總結 使用合適的資料型別,選擇合適的索引 sql的編寫需要注意優化 使用limit對查詢結果的記錄進行限定 避免select 將需要查詢的字段列出來 使用連線 join 來代替子查詢 拆分大的delete或insert語句 可通過開啟慢查詢...