Mysql分库分表方案

1.为什么要分表:

当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。

mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。


 2.大数据量并且访问频繁的表,将其分为若干个表

比如对于某网站平台的数据库表-公司表,数据量很大,这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。

     某网站现在的数据量至多是5000万条,可以设计每张表容纳的数据量是500万条,也就是拆分成10张表,那么如何判断某张表的数据是否容量已满呢?可以在程序段对于要新增数据的表,在插入前先做统计表记录数量的操作,当<500万条数据,就直接插入,当已经到达阀值,可以在程序段新创建数据库表(或者已经事先创建好),再执行插入操作。

3. 利用merge存储引擎来实现分表

如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了。用merge存储引擎来实现分表, 这种方法比较适合.

第一步:建立user1users

CREATE TABLE user1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 name CHAR(20), pass CHAR(32), sex tinyint(1)) ENGINE=Myisam;  
   
CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 name CHAR(20), pass CHAR(32), sex tinyint(1)) ENGINE=MERGE UNION=(user1) INSERT_METHOD=LAST;  
   
INSERT INTO users (name,pass,sex) VALUES 
('user11','123456',1),('user12','123456',1),('user13','123456',0);

第二步:建立user2及修改users
CREATE TABLE user2 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 name CHAR(20), pass CHAR(32), sex tinyint(1)) ENGINE=Myisam;

ALTER TABLE users  UNION=(user1,user2) INSERT_METHOD=LAST;

INSERT INTO users (name,pass,sex) VALUES 
('user21','123456',1),('user22','123456',1),('user23','123456',0);

第三步:建立user3及修改users
CREATE TABLE user3 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
name CHAR(20), pass CHAR(32), sex tinyint(1)) ENGINE=Myisam;

ALTER TABLE users  UNION=(user1,user2,user3) INSERT_METHOD=LAST;

INSERT INTO users (name,pass,sex) VALUES 
('user31','123456',1),('user32','123456',1),('user33','123456',0);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值