MySQL分表處理的實(shí)現(xiàn)方法
MySQL分表處理用于處理海量的數(shù)據(jù)庫(kù),下面就為您詳細(xì)介紹MySQL分表處理的實(shí)現(xiàn)方法,希望對(duì)您能夠有所啟迪。
面對(duì)海量數(shù)據(jù)的表的時(shí)候,我們需要對(duì)它進(jìn)行分表處理,我是按月份分的表,即每月都要建立一張表
比如 table_2010_04,table_2010_05,table_2010_06......您可以根據(jù)自己的需要,可以根據(jù)時(shí)間和不同的字段以及類型來(lái)分表。我按月分表是因?yàn)槲抑恍枰樵兠刻斓臄?shù)據(jù),不需要查月份的數(shù)據(jù),不需要好幾張表同時(shí)(union)查詢,所以查詢速度還是很快的,但是如果需要很多張表的union查詢的話速度可能就要慢了,那時(shí)候就要重新考慮分表的方式了。
每個(gè)月的開(kāi)始都要進(jìn)行一個(gè)操作建立一張以月為單位的新表來(lái)存儲(chǔ)過(guò)去一個(gè)月的數(shù)據(jù),當(dāng)然有一張表的表名是一直不變的,這張表是用來(lái)暫時(shí)存儲(chǔ)新的一個(gè)月的數(shù)據(jù)的。
我現(xiàn)在有一張表叫 my_table ,那這張表是一直存在的,比如現(xiàn)在是六月三號(hào),那六月份的數(shù)據(jù)就暫時(shí)存儲(chǔ)在這張表中,這時(shí)候首先需要my_table變名,
rename table my_table to table_2010_05; 這時(shí)候就重新命名了my_table這張表,但是原來(lái)的my_table這張表還是存在的,只不過(guò)所有的數(shù)據(jù)都已經(jīng)存儲(chǔ)在table_2010_05這張表上了,這就是用rename進(jìn)行批處理的好處,大量的數(shù)據(jù)不需要在進(jìn)行轉(zhuǎn)移的時(shí)候不需要進(jìn)行導(dǎo)出和導(dǎo)入的操作,那樣效率會(huì)很低,而且對(duì)數(shù)據(jù)庫(kù)造成的壓力會(huì)很大,
在重新命名了my_table這張表后需要重新要?jiǎng)?chuàng)建my_table這張表,CREAT my_table (.......)
table_2010_05 原則上存儲(chǔ)的都是五月份的數(shù)據(jù),但是因?yàn)槭侨?hào)才進(jìn)行這個(gè)操作,所以肯定是六月一號(hào)到三號(hào)的數(shù)據(jù)還是存儲(chǔ)到了table_2010_05 這張表上,那就需要從這張表中把一號(hào)到三號(hào)的數(shù)據(jù)重新查找出來(lái)插入到my_table (暫時(shí)存儲(chǔ)的是六月份的數(shù)據(jù))
insert into my_table (field1,field2....) SELECT field1,field2....FROM my_table_2010_05 WHERE filed3 >= "2010-06-01"; 這樣就把一號(hào)到三號(hào)的數(shù)據(jù)存入到了暫時(shí)存儲(chǔ)六月份數(shù)據(jù)的my_table 到七月初的時(shí)候還要對(duì)該表進(jìn)行重復(fù)的操作進(jìn)行分表處理,my_table 這張表保持不變的好處是每次插入的sql語(yǔ)句就不用改了,但是進(jìn)行查詢的時(shí)候就需要對(duì)時(shí)間進(jìn)行判斷,以確定具體查找那一張表,因?yàn)槲覀円呀?jīng)進(jìn)行了分表操作。
這樣每個(gè)月初都重復(fù)這樣一個(gè)操作,分表就順利實(shí)現(xiàn),在進(jìn)行插入之間還要進(jìn)行這樣一個(gè)操作,ALTER TABLE my_table MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;這樣操作的好處是保證表存儲(chǔ)好大量數(shù)據(jù)(超過(guò)2G)的數(shù)據(jù),目前我的一個(gè)月的表中存儲(chǔ)了11G多的數(shù)據(jù),所以進(jìn)行分表錯(cuò)做非常有必要,大家可以根據(jù)自己的實(shí)際情況來(lái)進(jìn)行分表操作(如果是數(shù)據(jù)量很小的話就不需要進(jìn)行這個(gè)操作了)
【編輯推薦】
mysql數(shù)據(jù)庫(kù)大小寫的問(wèn)題討論
MySQL MyISAM表結(jié)構(gòu)的恢復(fù)