文档章节

MySQL分表

私人暖炉
 私人暖炉
发布于 2017/07/26 11:25
字数 382
阅读 3
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

假设现在有一个应用系统可能会有100亿的用户量,另外一个表一般存储量在不超过100万的时候基本能保持良好性能,计算下来,我们需要1万张表,即分表为1万个表。

例如原表是sina_userinformation,包含字段有id,name,sex,address.........。首先需要创建s_userinformation1-100000.

DROP table IF EXISTS s_userinformation1;
create table s_userinformation1(
    id bigint primary key auto_increment ,
    name varchar(20),
    sex tinyint not null default '0',
    ....
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

创建剩余表可以写一个脚本 ,其中用   "create table s_userinformation".$num."like s_userinformation1;" 语句来创建其余的表

最后创建总表

DROP table IF EXISTS s_userinformation;
create table s_userinformation(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0',

..........
)ENGINE=MERGE UNION=(tb_member1,tb_member2,........) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;

接下来分数据到每个表中 “insert into tb_member".$i."(id,name,sex...........) select id,name,sex....... from sina_userinfomation where id%".$count."=".$i-1.";"

//查询数据

解释一下:($id >> 20)表示将向右移位20位,(向右移动一位标示减少一半),printf('%d',$data)标示将数据按照十进制输出。

               即id为1~1048575(2的20次幂-1)时均访问user_0,1048576~2097152时访问user_1,以此类推.....

那么问题来了,如果用户更多怎么办,现在需要一个可扩展的方法:

function getTable($id,$bit,$seed){

   return 'user_'.sprintf('%0{$bit}d',($id >> $seed));

}

其中:$id为用户id,$bit标示表后缀的位数,$seed表示要移位的位数即:单个表能存储的记录条数。

这样就可以任意分表了。

© 著作权归作者所有

私人暖炉
粉丝 1
博文 22
码字总数 4168
作品 0
保定
私信 提问
加载中
请先登录后再评论。
分区和分表的区别和各自的优缺点

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

从道者
昨天
0
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

haorizi
2013/03/11
213
1
PHPer面试指南-MySQL 篇

本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide 什么是索引,作用是什么?常见索引类型有那些?Mysql 建立索引的原则? 索引是一种特殊的文件,它们包含着对数据表里所...

angkee
2018/01/24
0
0
mysql表分区和分表的实现方式几种以及区别,什么时候用

https://zhidao.baidu.com/question/1925197958107188947.html 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分...

osc_nnd0q3n4
2018/08/01
7
0
多线程检索 mysql 分表模式,发挥分表方案的最大性能

我天真的认为,mysql 的 merge 引擎分表模式下,mysql 会自动启用多线程对旗下的子表进行并发检索,但到目前为止我是没找到 mysql 的此机制设置,简单测试下就会发现....mysql 依然是依次检索...

big_cat
2016/05/19
251
0

没有更多内容

加载失败,请刷新页面

加载更多

向您推荐Groove BizTalk Workspace!

什么是Groove Office Groove 2007 是一个协作软件程序,适合用于处理从简单的文档协作到与业务过程集成的自定义解决方案的各种项目活动。 Office Groove 2007 的以下十大方式可帮助您和您的团...

osc_o8ipcpa5
10分钟前
13
0
【我的Android进阶之旅】你可能不知道android.view.View#setAlpha()方法也会影响你的APP性能!

一、问题描述 最近在优化APP的性能的时候,发现了一个平时完全没有注意到的一个能够影响APP性能的代码。这个代码就是调用了android.view.View#setAlpha()方法。 1.1 需求描述 APP有个需求,是...

osc_y08db3kb
10分钟前
15
0
lsof命令详解

lsof命令详解 lsof 简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境中一切皆文件,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制...

osc_htns3spg
11分钟前
8
0
设置非root账号不用sudo直接执行docker命令

环境信息 操作系统:Ubuntu 20.04 LTS 桌面版 Docker:19.03.10 现状 当前账号是willzhao,直接执行docker xxx命令会报以下错误: willzhao@ideapad:~$ docker imagesGot permission denie...

osc_kl6fknqf
12分钟前
8
0
小米净水器更换滤芯步骤和水龙头亮黄灯的解决办法

【开篇序言】 众所周知,无论何种品牌的净水器,滤芯都是有一定使用寿命的,而不是一次性安装可永久使用,如果遇到无需换滤芯这类宣布,请远离,不靠谱。换滤芯,小米净水器也不例外,小米净...

osc_zzg7fpke
13分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部