文档章节

1亿条数据如何分表100张到Mysql数据库中(PHP)

zyt_1978
 zyt_1978
发布于 2016/07/06 20:03
字数 384
阅读 23
收藏 4

这篇文章主要介绍了当数据量猛增的时候如何把一亿条数据分表100张到Mysql数据库中,需要的朋友可以参考下

下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码。

当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1亿条数据,分100张表。具体实现过程如下:

首先创建100张表:

?

1

2

3

4

5

6

7

8

9

10

$i=0;

while($i<=99){

echo "$newNumber \r\n";

$sql="CREATE TABLE `code_".$i."` (

`full_code` char(10) NOT NULL,

`create_time` int(10) unsigned NOT NULL,

PRIMARY KEY (`full_code`),

) ENGINE=MyISAM DEFAULT CHARSET=utf8";

mysql_query($sql);

$i++;

下面说一下我的分表规则,full_code作为主键,我们对full_code做hash

函数如下:

?

1

2

3

4

5

6

7

$table_name=get_hash_table('code',$full_code);

function get_hash_table($table,$code,$s=100){

$hash = sprintf("%u", crc32($code));

echo $hash;

$hash1 = intval(fmod($hash, $s));

return $table."_".$hash1;

}

这样插入数据前通过get_hash_table获取数据存放的表名。

最后我们使用merge存储引擎来实现一张完整的code表

?

1

2

3

4

5

CREATE TABLE IF NOT EXISTS `code` (

`full_code` char(10) NOT NULL,

`create_time` int(10) unsigned NOT NULL,

INDEX(full_code)

) TYPE=MERGE UNION=(code_0,code_1,code_2.......) INSERT_METHOD=LAST ;

这样我们通过select * from code就可以得到所有的full_code数据了。

以上介绍就是本文的全部内容,希望对大家有所帮助。

本文转载自:http://www.jb51.net/article/70265.htm

共有 人打赏支持
zyt_1978
粉丝 8
博文 166
码字总数 21058
作品 0
程序员
私信 提问
mysql分表与分区表

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

JasonO
2016/01/27
16
0
MySQL分表的3种方法

MySQL分表的3种方法 标签:Mysql 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小...

Lunaqi
2017/12/27
0
0
【干货】数据库分库分表基础和实践

数据库架构的演变 在业务数据量比较少的时代,我们使用单机数据库就能满足业务使用,随着业务请求量越来越多,数据库中的数据量快速增加,这时单机数据库已经不能满足业务的性能要求,数据库...

中间件小哥
08/31
0
0
干货:数据库分库分表基础和实践

数据库架构的演变 在业务数据量比较少的时代,我们使用单机数据库就能满足业务使用,随着业务请求量越来越多,数据库中的数据量快速增加,这时单机数据库已经不能满足业务的性能要求,数据库...

中间件小哥
08/31
0
0
mysql的分区和分表

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

stone_
2016/08/16
59
0

没有更多内容

加载失败,请刷新页面

加载更多

node上的redis调用优化示例

Node.js读写数据到influxDB,目前已经有一个库node-influx, 这个库功能非常强大,但是我个人使用这个库的时候,遇到无法解决的问题。 使用curl都可以写数据到influxDB,但是用node-influx总是...

前端攻城老湿
30分钟前
1
0
The setting logImpl is not known

问题: org.apache.ibatis.builder.BuilderException: The setting logImpl is not known. Make sure you spelled it correctly (case sensitive). MyBatis 3.1.1 -jar还没有 logImpl 这个设......

晨猫
42分钟前
1
0
eslint一些规则

一、指定js文件不使用 ESLint 语法检查 1.整个文件范围内禁止规则出现警告 将/* eslint-disable */放置于文件最顶部 /* eslint-disable */alert('foo'); 2.在文件中临时禁止规则出现警告 ...

xiaoge2016
42分钟前
1
0
mac终端常用命令

ls ls,list的简写,列出目录的内容。 -a:显示隐藏文件 -l:以列表方式显示文件信息 -h:配合-l,显示更人性化 配合通配符使用 ls *.txt:显示所有以.txt结尾的文件 ls ?.txt:显示‘任意字符.tx...

xiaobai1315
44分钟前
1
0
java命令行读取配置,和加载jar的方式

--spring.profiles.active=t2,t3,xextest --spring.profiles.include=quartz-jp-Djava.ext.dirs=libs-Dspring.config.location=/data/apps/DBconfig -cp  "config/*"  start.sh......

经常把天聊死的胖子
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部