首頁  >  文章  >  資料庫  >  優化mysql 還是使用快取?

優化mysql 還是使用快取?

伊谢尔伦
伊谢尔伦原創
2016-11-24 11:30:171177瀏覽

 具體來說,我想比較的兩種最佳化策略是最佳化MySQL和快取。事先指出,這些最佳化是正交的,唯一讓你選擇其中一者而不是另一者的原因是他們都耗費了資源,也就是開發時間。

優化mysql 還是使用快取?

 優化MySQL

  優化MySQL時,一般會先查看發送給mysql的查詢語句,然後執行explain指令。稍加審查後很常見的做法是增加索引或對模式做一些調整。

  優點

  1、一個經過最佳化的查詢對於所有使用應用程式的使用者來說都是快速的。因為索引透過對數複雜度的速度來檢索資料(又稱分制,正如你搜尋一個電話簿一樣,逐步縮小搜尋範圍),而且隨著資料量的遞增也能維持良好的效能。對一個未經索引化的查詢的結果做快取隨著資料的成長有時可能會表現得更差。隨著資料的成長,那些未命中快取的用戶可能會得到很糟糕的體驗,這樣的應用程式是不可用的。

  2、優化MySQL不需要擔心快取失效或快取資料過期的問題。

  3、最佳化MySQL可以簡化技術架構,在開發環境下複製工作會更容易。

  缺點

  1、有一些查詢不能光透過索引得到效能上的改善,可能還需要改變模式,在某些情況下這對於一些應用可能會很麻煩。

  2、有些模式的變更可能用於反規範化(資料備份)。儘管對於DBA來說,這是一項常用的技術,它需要所有權以確保所有的地方都是由應用程式更新,或需要安裝觸發器來確保這種變化。

  3、一些最佳化手段可能是MySQL所特有的。也就是說,如果底層軟體被移植到多個資料庫上工作,那麼很難確保除了增加索引外一些更複雜的最佳化技術可以通用。

 使用快取

  這種最佳化需要人來分析應用的實際情況,然後將處理代價昂貴的部分從MySQL中剝離出來用第三方快取替代,例如memcached或Redis。

  優點

  1、快取對於一些MySql自身很難優化的查詢來說會工作地很好,比如大規模的聚合或者分組的查詢。

  2、快取對於提高系統的吞吐率來說可能是個不錯的方案。例如多人同時存取應用程式時響應速度很慢的情況。

  3、快取可能更容易建構在另一個應用之上。例如:你的應用程式可能是另一個用MySQL儲存資料的軟體包的前端,而要對這個軟體包做任何資料庫方面的改變都非常困難。

  缺點

  1、如果資料對外提供多種存取範式(例如,在不同的頁面上以不同的形式展示),那麼讓快取過期或更新可能會很難,同時/或可能需要容忍已過期的數據。一個可行的替代方案是設計一套更精細的快取機制,當然它也有缺點,即多次取得快取會增加延遲。

  2、快取一個產生代價昂貴的物件對於那些未命中快取的使用者(請參閱最佳化MySQL的優勢#1)而言可能會產生潛在的效能差異。一些好的效能實踐表明你應該盡量縮小用戶之間的差異性,而不僅僅是平均化(快取傾向於這麼做)。

  3、幼稚的緩存實現無力應對一些微妙的漏洞,例如雪崩效應。就在上週我幫助了一個人,他的資料庫伺服器被多個試圖同時再生同樣快取內容的用戶請求沖垮。正確的策略是引入一定程度的鎖來將快取再生的請求序列化。

 總結

  一般情況下,我會建議使用者先對MySQL進行最佳化,因為這是我認為開始階段最合適的解決方案。但長期來看,大部分應用程式都會有一些用例需要一定程度上同時實現以上這些方案。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn