總結MySQL大數據量下如何進行優化


寫在建庫前:

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

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

以上的考慮項,對數據庫的類型表的結構表間關系的定義數據庫配置都有非常重要的影響。

 

運行后優化:

優化順序

第一,優化你的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM