mysql分表方法-----MRG_MyISAM引擎分表法
一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来具体说说分表的一些方法。眼下我所知道的方法都是MYISAM的,INNODB怎样做分表而且保留事务和外键,我还不是非常了解。
首先,我们须要想好究竟分多少个表,前提当然是满足应用。这里我使用了一个比較简单的分表方法,就是依据自增id的尾数来分,也就是说分0-9一共10个表,其取值也非常好做,就是对10进行取模。另外,还能够依据某一字段的md5值取当中几位进行分表,这种话,能够分的表就非常多了。
好了,先来创建表吧,代码例如以下

CREATE TABLE `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`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 `test`.`article` (
`id` BIGINT( 20 ) NOT NULL ,
`subject` VARCHAR( 200 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE=CREATE TABLE user (
`id` int(11) NOT NULL PRIMARY key,
`username` varchar(20) NOT NULL,
`passwd` char(32) NOT NULL
) ENGINE=MERGE DEFAULT CHARSET=utf8 INSERT_METHOD=no 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_METHOD=NO
注意,合并表也必须和前面的表有同样的结构,类型,长度,包含字段的顺序都必须一致这里的INSERT_METHOD=0表示不同意对本表进行insert操作。好了,当须要查询的时候,我们能够仅仅对article这个表进行操作就能够了,也就是说这个表仅仅仅仅能进行select操作
那么对于插入也就是insert操作应该怎样来搞呢,首先就是获取唯一的id了,这里就还须要一个表来专门创建id,代码例如以下
CREATE TABLE `test`.`create_id` (
`id` BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE = MYISAM
也 就是说,当我们须要插入数据的时候,必须由这个表来产生id值,我的php代码的方法例如以下
function get_AI_ID() {
$sql = "insert into create_id (id) values('')";
$this->db->query($sql);
return $this->db->insertID();
}
好了,如今如果我们要插入一条数据了,应该怎么操作呢?还是继续看代码吧

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;
}

事实上非常easy的,对吧,就是先获取id,然后依据id获取应该插入到哪个表,然后就非常easy了。
对于update的操作我想应该不须要再说了吧,无非是有了id,然后获取表名,然后进行update操作就好了。
mysql分表方法-----MRG_MyISAM引擎分表法的更多相关文章
- (转)Mysql技术内幕InnoDB存储引擎-表&索引算法和锁
表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...
- MySQL技术内幕InnoDB存储引擎(表&索引算法和锁)
表 4.1.innodb存储引擎表类型 innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示 ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- MySQL/MariaDB数据库的存储引擎
MySQL/MariaDB数据库的存储引擎 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL体系结构 连接管理模块: 负责接收远程用户的连接. 线程管理模块: 维护 ...
- 基于MRG_MyISAM引擎的Mysql分表
正常情况下的分表,都是直接创建多个相同结构的表,比如table_1.table_2...最近碰到一个特殊需求,需要创建一个主表,所有分表的数据增删改查,全部自动实时更新到主表,这个时候可以使用MRG_ ...
- Mysql使用Merge引擎分表--方式及优缺点
merge:是SQL语句的一种.具体来说,MERGE语句会检查原数据表记录和目标表记录.如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作):如果目标 ...
- 什么是分表和分区 MySql数据库分区和分表方法
1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...
- mysql分表方法实现
一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是 ...
- mysql merge引擎分表
---------------------创建表一--------------------------------------DROP TABLE a1;CREATE TABLE `a1` ( `id ...
随机推荐
- nyoj 2
#include <iostream> #include <stack> #include <string.h> #include <stdio.h> ...
- 封装函数--->切换,添加,删除class
var obj={}; obj.className='a b c d active'; //切换class function toggle(obj,className) { var str=obj.c ...
- 数据库、C#、Java生成唯一GUID 方法
GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值.GUID ...
- Warning: World-writable config file '/etc/my.cnf' is ignored
1. 问题描述: 重启mysql服务时出现以下信息: Warning: World-writable config file '/etc/my.cnf' is ignored 出现这种情况的原因是:m ...
- MSSQL 字符串替换语句
MSSQL替换语句:update 表名 set 字段名=replace(cast(字段名 as varchar(8000)),'abc.com','123.com')例如:update PE_Arti ...
- 修复 status 为 unusable 的 index
以DBA权限登陆,执行以下脚本即可. declare -- 指向所有 UNUSABLE 状态的 index 的游标 cursor c is select index_n ...
- Css Div半透明
用CSS控制外层DIV不透明,而内层DIV透明,这样实现的效果是意想不到的,还不错吧,其实代码也是很简单的,也很好理解,主要是用了CSS的滤镜. <html xmlns="http:/ ...
- JAVA-2-GetDay
import java.util.*; public class Ch0310 { public static void main(String[] args) { // TODO 自动生成的方法存根 ...
- ComboBox相关操作
取组合框文本示例: 1 void ShowDlgWage::OnCbnSelendokCombo1() { // TODO: 在此添加控件通知处理程序代码 CString str; int i; i ...
- uva 484 - The Department of Redundancy Department
已有的数据结构装不下数据,或者不能处理现有的数据,那就必须要思考其他的辅助手段,辅助结构: #include <cstdio> #include <map> #include ...