回覆列表
-
1 # 使用者26799935818
-
2 # 使用者3916807372217
第一最佳化你的sql和索引;
第二加快取,memcached,redis;
第三以上都做了後,還是慢,就做主從複製或主主複製,讀寫分離,可以在應用層做,效率高,也可以用三方工具,第三方工具推薦360的atlas,其它的要麼效率不高,要麼沒人維護;
第四如果以上都做了還是慢,不要想著去做切分,mysql自帶分割槽表,先試試這個,對你的應用是透明的,無需更改程式碼,但是sql語句是需要針對分割槽表做最佳化的,sql條件中要帶上分割槽條件的列,從而使查詢定位到少量的分割槽上,否則就會掃描全部分割槽,另外分割槽表還有一些坑,在這裡就不多說了;
第五如果以上都做了,那就先做垂直拆分,其實就是根據你模組的耦合度,將一個大的系統分為多個小的系統,也就是分散式系統;
INSERT - 一天幾十萬的資料不算多,如果你的磁碟配置得當不需要特別最佳化,想最佳化方法也很多,比如把寫入資料快取到某個記憶體裡的中間層,然後取出來批次寫入;比如INSERT DALAYED等非同步寫入技巧UPDATE - 只要索引設計是高效的,也沒有特別的問題;如果操作時效性要求不高,同樣可以批次化和非同步化,比如UPDATE LOW PRIORITYREAD - 所有語句都需要EXPLAIN確認過效能開銷確保沒有瓶頸,通常無條件的SELECT本身不是問題,使用LIMIT以後也不會有問題,但如果用了GROUP BY,HAVING或者在表上作統計操作,就容易有瓶頸儘早做master-master,cluster replication,至少要做master-replication,直接的好處首先是降低備份難度和風險,多庫同步以後你可以在臨時切斷replication的前提下在非生產機上冷備份;其次是讀和寫可以分離,假如偶爾有昂貴的查詢,可以不影響生產機保持對伺服器記憶體和磁碟IO的監控,確保資料庫有足夠的記憶體,IO維持在合理的Load內,用盡可能好的硬碟比較新的文章 Ten ways to improve the performance of large tables in MySQL讓專業DBA管理(不要dev-op)