總結MySQL大資料量下如何進行最佳化

來源:互聯網
上載者:User

標籤:mysql   使用   關係   實施   redis   emc   模組   div   寫入   

寫在建庫前:

在確定資料庫業務後、建立資料庫表格時,就應對一些常見問題有所考慮,以避免在資料增長一段時間後再做應對,可能造成時間及維護成本增加:

  • 資料的月增量,年增量
  • 資料的快速增長點
  • 是否需要觸發器或事件等
  • 查詢業務需求
  • 伺服器訪問量

以上的考慮項,對資料庫的類型、表的結構、表間關係的定義及資料庫配置都有非常重要的影響。

 

運行後最佳化:

最佳化順序

第一,最佳化你的sql和索引;

  想實現一個查詢,可以寫出很多種查詢語句,不同的語句,根據你選擇的引擎、表中資料的分布情況、索引情況、資料庫最佳化策略、查詢中的鎖策略等因素,最終查詢的效率相差很大;最佳化要從整體去考慮,有時你最佳化一條語句後,其它查詢反而效率被降低了,所以要取一個平衡點。

第二,加緩衝,memcached,redis;

第三,主從複製或主主複製,讀寫分離;

第四,如果以上都做了還是慢,不要想著去做切分,mysql內建分區表,先試試這個,對你的應用是透明的,無需更改代碼,但是sql語句是需要針對分區表做最佳化的,sql條件中要帶上分區條件的列,從而使查詢定位到少量的分區上,否則就會掃描全部分區,另外分區表還有一些坑;(分區表的使用還是有所保留,貌似目前的分區鍵設計還不太靈活,如果不走分區鍵,很容易出現全表鎖;另外一旦資料量並發量上來,如果在分區表實施關聯,就是一個災難。)

第五,如果以上都做了,那就先做垂直分割,其實就是根據你模組的耦合度,將一個大的系統分為多個小的系統,也就是分布式系統;

第六,才是水平切分,針對資料量大的表,這一步最麻煩,最能考驗技術水平,要選擇一個合理的sharding key,為了有好的查詢效率,表結構也要改動,做一定的冗餘,應用也要改,sql中盡量帶sharding key,將資料定位到限定的表上去查,而不是掃描全部的表;

 

參考:

1,MySQL 對於千萬級的大表要怎麼最佳化? https://www.zhihu.com/question/19719997

2,通過配置Mysql參數提高寫入速度(整理) https://www.cnblogs.com/lzy1991/p/4778786.html

3,不建議mysql分區表  http://blog.csdn.net/qq_19707521/article/details/59058135

 

總結MySQL大資料量下如何進行最佳化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.