PHP操作mysql数据库分表的方法


Posted in PHP onJune 09, 2016

一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法。首先,我们需要想好到底分多少个 表,前提当然是满足应用。这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10 进行取模。另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了。

好了,先来创建表吧,代码如下:

CREATE TABLE `ttlsa_com`.`article_0` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_1` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_2` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_3` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_4` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_5` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_6` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_7` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_8` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `ttlsa_com`.`article_9` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

好了10个表创建完毕了,需要注意的是,这里的id不能设为自增,而且所有的表结构必须一致,包括结构,类型,长度,字段的顺序都必须一致那么对于这个id如何取得呢?后面我会详细说明。现在,我们需要一个合并表,用于查询,创建合并表的代码如下:

CREATE TABLE `ttlsa_com`.`article` ( 
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=0 union =(`article_0`,`article_1`,`article_2`,`article_3`,`article_4`,`article_5`,`article_6`,`article_7`,`article_8`,`article_9`);

注意,合并表也必须和前面的表有相同的结构,类型,长度,包括字段的顺序都必须一致这里的INSERT_METHOD=0表示不允许对本表进行 insert操作。好了,当需要查询的时候,我们可以只对article这个表进行操作就可以了,也就是说这个表仅仅只能进行select操作,那么对于 插入也就是insert操作应该如何来搞呢,首先就是获取唯一的id了,这里就还需要一个表来专门创建id,代码如下:

CREATE TABLE `ttlsa_com`.`create_id` ( 
`id` BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY 
) ENGINE = MYISAM

也就是说,当我们需要插入数据的时候,必须由这个表来产生id值,我的php代码的方法如下:

<?php 
function get_AI_ID() { 
$sql = "insert into create_id (id) values('')"; 
$this->db->query($sql); 
return $this->db->insertID(); 
} 
?>

好了,现在假设我们要插入一条数据了,应该怎么操作呢?还是继续看代码吧

<?php 
function new_Article() { 
$id = $this->get_AI_ID(); 
$table_name = $this->get_Table_Name($id); 
$sql = "insert into {$table_name} (id,subject,content) values('{$id}','测试标题','测试内容')"; 
$this->db->query($sql); 
} 
/** 
* 用于根据id获取表名 
*/ 
function get_Table_Name($id) { 
return 'article_'.intval($id)%10; 
} 
?>

其实很简单的,对吧,就是先获取id,然后根据id获取应该插入到哪个表,然后就很简单了。
对于update的操作我想应该不需要再说了吧,无非是有了id,然后获取表名,然后进行update操作就好了。
对于用户表,建个最少列最基本信息的用户名,比如用户ID,用户名,密码。用户的其他信息分布到以用户ID分表的表上。
怎么分表如何分表以业务需求而定。

你可以根据id分,也可以根据年,月,地区来分。要按照业务需求。

以上所述是小编给大家介绍的PHP操作mysql数据库分表的方法,希望对大家有所帮助,如果大家有不同的见解欢迎提出,共同学习进步!

PHP 相关文章推荐
PHP 数字左侧自动补0
Mar 31 PHP
php采集时被封ip的解决方法
Aug 29 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
Jun 26 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
关于PHP开发的9条建议
Jul 27 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 #PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 #PHP
WordPress分页伪静态加html后缀
Jun 08 #PHP
php 流程控制switch的简单实例
Jun 07 #PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 #PHP
PHP session 会话处理函数
Jun 06 #PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 #PHP
You might like
php Mysql日期和时间函数集合
2007/11/16 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
JS之相等操作符详解
2016/09/13 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python如何测试stdout输出
2020/08/10 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
中专生自我鉴定范文
2013/12/19 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
python模板入门教程之flask Jinja
2022/04/11 Python