一、利用merge儲存引擎來實現分表
1、建立分表,和主表的表結構相同,這裡建立3個表
create table 新錶 like 舊表;
create table csdn1 like csdn;
2、複製主表資料到分表
insert into csdn1 select * from csdn limit 50000;
insert into csdn2 select * from csdn limit 50001,50000;
insert into csdn3 select * from csdn limit 100002,50000;
insert into csdn4 select * from csdn limit 150003,50000;
insert into csdn5 select * from csdn limit 200004,50000;
insert into csdn6 select * from csdn limit 250005,50000;
3、建立彙總表csdnall
create table csdnall like csdn;
alter table csdnall engine=merge union=(csdn1,csdn2,csdn3,csdn4,csdn5,csdn6) insert_method=last;
這樣插入新的資料會插入的csdn6,最後乙個表中
二、利用hash、md5等自己的演算法分表
現在的案例是我們有乙個1000多萬條記錄的使用者表members,查詢起來非常之慢,同事的做法是將其雜湊到100個表中,分別從members0到members99
,然後根據mid分發記錄到這些表中,**大概是這樣子:
<?php
for($i=0;$i< 100; $i++ ) like db1.members
"; echo "insert into members select * from members where mid%100=";}
?>
1、不停機修改mysql表結構
同樣還是members表,前期設計的表結構不盡合理,隨著資料庫不斷執行,其冗餘資料也是增長巨大,使用了下面的方法來處理:
先建立乙個臨時表:
/*建立臨時表*/
create table members_tmp like members
然後修改members_tmp的表結構為新結構,接著使用上面那個for迴圈來匯出資料,因為1000萬的資料一次性匯出是不對的,mid是主鍵,乙個區間乙個區間的導,基本是一次匯出5萬條吧,這裡略去了,接著重新命名將新錶替換上去:
/*這是個頗為經典的語句哈*/
rename table members to members_bak,members_tmp to members;
MySQL 分庫分表 方案方法
眾所周知,資料庫很容易成為應用系統的瓶頸。單機資料庫的資源和處理能力有限,在高併發的分布式系統中,可採用分庫分表突破單機侷限。本文總結了分庫分表的相關概念 全域性id的生成策略 分片策略 平滑擴容方案 以及流行的方案。在業務量不大時,單庫單錶即可支撐。當資料量過大儲存不下 或者併發量過大負荷不起時,...
mysql 分表實現方法詳解
如果你需要進行mysql分表了我們就證明你資料庫比較大了,就是把一張表分成n多個小表,分表後,單錶的併發能力提高了,磁碟i o效能也提高了。併發能力為什麼提高了呢,因為查尋一次所花的時間變短了,如果出現高併發的話,總表可以根據不同的查詢,將併發壓力分到不同的小表裡面 什麼是分表,從表面意思上看呢,就...
mysql分表程式改動方法
mysql分表 程式如何改動 1.sbrmvlc實現分表的原理如下程式設計客棧 2.做mysql集程式設計客棧群利用mysql cluster mysql proxy,mysql replic程式設計客棧ation,drdb的命令如下 3.出現大資料量並且訪問頻繁的表 將其分為若干個表。方法 如下 ...