標籤: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大資料量下如何進行最佳化