mysql單錶資料量巨大時,查詢效能會很差,經常遇到的是儲存日誌相關的資料會每天產生大量的資料。
這裡提供單錶拆分成多表儲存的三個思路:
預先建立好n張表,記錄按id取模儲存到相應的表中。
優點:簡單粗暴
缺點:
受id模式,預先建立好錶的數量,不易擴充套件和改動。
按id查詢方便,但按時間查詢就比較麻煩。
資料量大時遷移會影響效能。
例如:表test 拆分到100張表中
insert into test select * from test where id%100=
insert into test_yyyymm (field1,field2....) select field1,field2....from test where filed3 >= "yyyymmdd" and filed3 <= "yyyymmdd+1";
優點:按時間好分類統計。
缺點:特定id查詢不方便,資料量大時遷移會影響效能。
先複製test 表的結構建立乙個臨時表:
create table test_tmp like test
rename table test to test_yyyymm,test_tmp to test;
在rename期間表是被鎖死的,所以不用擔心rename時資料丟失!
注意,按月份儲存,則每月1號定時執行。
當然也可以變換拆分的方式,自由發揮了!
優點:快捷,無需資料匯入匯出。
Mysql 分表策略
資料量大了需要考慮使用分表來減輕單錶壓力,提公升查詢效能。當然也有其他舉措,比如讀寫分離 cluster等,此文重點講分表的做法。分表有幾種做法?1.分表的原理 把常用字段如id或name取hash值,根據hash值放在不同的表中。當然也有求餘的方法,這個可以多種方法來實現。這個方法使用於論壇,發貼...
mysql 分表,拆分策略
一 時間結構 1 平板式 表類似 article 200901 article 200902 article 200903 用年來分還是用月可自定,但用日期的話表就太多了,也沒這必要。一般建議是按月分就可以。這種分法,其難處在於,假設我要列20條資料,結果這三張表裡都有2條,那麼業務上很有可能要求讀...
mysql分表策略 01
第四個問題 一張表中有都有50億條資料了,這個時候該咋辦?超過1000w一張表就要做分表了 建表 就是比如user 01,user 02 假設建立了n張同樣的表 如何做crud?在redis中儲存乙個id,每次插入一條資料,就自增 每次插入資料之間,先取出id,然後 id n 0,1,n 1 根據取...