Mysql水平分表-merge
生活随笔
收集整理的這篇文章主要介紹了
Mysql水平分表-merge
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:介紹:
merge是Mysql最簡單的一種分表,Mysql自帶的一個分表功能,Merge表并不保存數據,Merge表和分表是對應映射關系。
優點:
使用簡單,不用修改程序代碼,最多我們修改一下Merage表名就可以兼容以前程序
缺點:
a:只能使用MyISAM引擎
b:很難平均分配,比如Merage設置插入條件,要么只能插入到第一個表,要么插入到最后一個表。
c:沒有約束ID,比如現在是在第一個表插入,后面我改成在第二個表插入,那么ID在Merage表中就會重復,ID不唯一,就會造成很多程序異常。解決這個問題,需要統一規則,不能一會兒在前面插入,一會兒在后面插入,也不能直接在分表插入,分表插入不是不可以,如果統一了全局ID,可以在分表插入。
綜合適應場景:
merge分表非常適合開始沒做好規劃,后來數據量上來,要拆分表的情況;比如接手一個項目,上一路人馬把幾千萬條數據弄在一個表里面,拆表很可能就要改sql,此時你心里肯定一千個草泥馬,用merge分表這種方式不需要改代碼即可輕松實現。
三:思路:
創建大表 大表添加數據
復制大表,就是分表2個
建立分表管理表
進行插入數據測試
四:分表的管理表
CREATE TABLE `tall` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`t1`,`t2`);備注:tall:Merge表名;INSERT_METHOD:表示插入方式;INSERT_METHOD=LAST 添加數據的時候插入到最后一個表,這里就是t2INSERT_METHOD=FIRST 添加數據的時候插入到第一個表,這里就是t1INSERT_METHOD=0 不允許插入UNION = (t1,t2) 關聯t1和t2表 Merge表 數據結構必須和分表完全一致上面藍色部分ENGINE必須是MRG_MyISAM或者MERGE,這兩個是一個意思。四:方法SQL
-- 創建大表-- CREATE TABLE `t` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;-- 創建分表-- create table t1 like t; create table t2 like t;-- 分表獲取大表數據-- insert into t1 select * from t where id%2=0; insert into t2 select * from t where id%2=1;-- 分表管理表-- drop table if exists tall;CREATE TABLE `tall` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=FIRST UNION=(`t1`,`t2`);-- 測試數據-- -- insert into tall (name,sex) values ("a",1); insert into tall (name,sex) values ("a",1); insert into tall (name,sex) values ("a",1); insert into tall (name,sex) values ("a",1);?
總結
以上是生活随笔為你收集整理的Mysql水平分表-merge的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贷款连带担保责任后果
- 下一篇: 商业房抵押贷款能贷多少