mysql分表的方法

2021-06-07 05:06:59 字數 1562 閱讀 9350

一、利用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.出現大資料量並且訪問頻繁的表 將其分為若干個表。方法 如下 ...