MySQL效能優化與架構設計學習

2021-07-29 17:55:39 字數 1751 閱讀 4420

8.2 query 語句優化基本思路和原則

1、優化更需要優化的query;

什麼query的優化能給系統整體帶來更大的收益,這樣的query就更需要優化;一般來說,高併發低消耗(相對)的query對整個系統的影響遠比低併發高消耗的query大;高併發低消耗的query只要節省一小塊資源,整個系統就將節省一大塊資源;而低併發高消耗的query要達到同等的效果,則需要該query節省很大一塊資源;且高併發低消耗的query的危險性比低併發高消耗的query大的多

2、定位優化物件的效能瓶頸;

在拿到一條需要優化的query之後,我們首先需要判斷這個query的瓶頸到底是io還是cpu。到底是因為在資料訪問消耗了太多的時間,還是在資料的運算(如分組排序等)方面花費的了太多資源;

3、明確的優化目的;

1、要清楚資料庫能承受的最大壓力,能接受的最悲觀情況;2、要清楚該query在最理想的情況下要消耗多少資源,最糟糕又需要消耗多少資源;3、改query實現的功能在系統中的重要地位得出該query能占用的資源比例,了解該query的效率給客戶帶來的體驗影響有多大;

4、從explain入手;

再優化任何乙個目標sql前,需要有乙個清晰的目標執行計畫,再借助explain來檢測結果是否滿足自己預定的執行計畫。對於不符合預期的執行計畫需要不斷分析query的寫法和資料庫物件的資訊,繼續調整嘗試,直至得到預期的結果;

5、多使用profile;

6、永遠用小結果集驅動大的結果集;

mysql中join只有nested loop一種方式,也就是說mysql的join都是通過巢狀迴圈來實現的。驅動結果集越大,所需迴圈的次數就越多,被驅動表的訪問次數也增多,每次迴圈都不能避免cpu的消耗和io資源的消耗;

nested loop原理

7、盡可能在索引中完成排序;

8、只取出自己需要的columns;

在任何query中只取自己需要的columns,尤其是在需要排序的情況下:1、取出的colum越多需要傳送的資料報越大,需要更大的網路頻寬和網路傳輸緩衝區;2、在需要排序的情況下有兩種排序演算法:老演算法1、現將需要排序的字段和可以直接定位到相關行資料的指標資訊取出,然後在我們設定的排序區(通過sort_buffer_size引數設定)中進行排序,完成之後再根據行指標資訊取出所需的columns,這種方法需要訪問兩次資料;新演算法2、一次性將所有的columns取出,在排序區進行排序後將排完序的資料作為結果集返回客戶端;改進後的方法,減少了io消耗,但是排序需要的記憶體增大很多,如果不需要的column太多,則勢必浪費很多記憶體資源。(當需要排序的列的總大小加上order by列的大小超過了 max_length_for_sort_data定義的位元組)則會選擇老的演算法,這樣效率低;

9、僅僅使用最有效的過濾條件;

where子句中並非條件越多越好,如果兩個條件和乙個條件得出的結果一致那麼請用乙個,並且請使用索引長度更短的那個,因為索引長度越長代表所用的索引空間更大,說明訪問該索引需要讀取的資料越多。例如:id 和 name 是一一對應的,id是int型別,name是varchar(20)的那麼 where id=1 and name='劉' 或者where name='劉'都不如where id =1的訪問效率高;

10、盡可能避免複雜的join和子查詢;

由於mysql內部資源鎖爭用,query語句涉及到的表越多,鎖定的資源越多,阻塞其他執行緒也越多,這將導致併發量高的時候系統整體效能急劇下降;可以考慮將複雜的query拆分成相對簡單的語句;當然這也可能導致網路傳輸方面資源消耗增加,所以這就應該根據每個系統的情況平衡取捨;

前四條是query優化的基本思路;後面6條是優化中的基本原則。

mysql架構設計 初識mysql架構設計

一 應用系統如何與mysql進行一次互動?最開始接觸jdbc的時候,我們系統如何完成一次sql操作呢?第一步,建立資料庫連線 第二步,操作sql 第三步,釋放連線。但是每次建立與資料庫的連線非常耗時和資源,所以我們加入了連線池的概念。第一步的獲取連線是從連線池中獲取乙個可用的連線,第三步的釋放連線不...

mysql資料庫架構設計與優化

2019 04 23 20 51 20 無畏d塵埃 閱讀數 179 收藏 更多 分類專欄 mysql 其他以上所有規範並非完全不能違背,只是如果不符時,要和公司dba團隊確認是否可以做相關操作alter table t1 add column c1 int,change column c2 int ...

《MySQL效能調優與架構設計》推薦序

mysql效能調優與架構設計 推薦序 from fenng mysql效能調優與架構設計 一書很快就會在各書店上架了,這裡帖出幾位好友為此書所寫的推薦序,分別是 馮大輝,陳吉平,馮春培,翟振興,葉金榮,吳詩展,再次在此感謝幾位了。按照出版社要求以各位的年齡為序排列 擁抱mysql資料庫技術 時至今日...