1. 垂直分表
1、 原表字段有 C1, C2, C3, C4, C5, C6, C7
2、 分表后表1字段:C1, C2, C3, C4
3、 分表后表2字段:C1, C5, C6, C7
在执行查询的时候根据C1主键查询
2. 水平分表
- 原表字段有 C1, C2, C3, C4, C5, C6, C7
- 分表后表1字段:C1, C2, C3, C4, C5, C6, C7 C1编号从1 -100万
- 分表后表2字段:C1, C2, C3, C4, C5, C6, C7 C1编号从100.0001万 – 200万
- 分表后表3字段:C1, C2, C3, C4, C5, C6, C7 C1编号从200.0001万 – 300万
在执行查询的时候根据C1判断该请求那个表获取数据
TP5在执行的实例:
在model层做分表功能
protected $table = 'ljj_poster';
// protected $table = 'ljj_poster_1';
// protected $table = 'ljj_poster_2';
// protected $table = 'ljj_poster_3';
/**
* type 分表的方式
* num 分表的数量
*/
protected $rule = [
'type' => 'mod', // 分表方式
'num' => 3 // 分表数量
];
/**
* 添加数据
* $data 要添加数据的参数
*/
public function inset_data($data){
//先添加总表数据表
$id = self::insertGetId($data);
//添加的ID
$temparr = array('id'=>$id);
//通过partition自动分表写入
$res = self::partition($temparr,'id',$this->rule)->insert($data);
return $res;
}
/**
* 查询数据
*/
public function select_data(){
//要查询的ID
$temparr = array('id'=>100);
//通过partition根据条件自动分表去查询
$res = self::partition($temparr,"id",$this->rule)
->where(array('id'=>100))->select();
return $res;
}
/**
* 修改数据
* $data 要修改数据的参数
*/
public function update_data($data){
//要修改的ID
$temparr = array('id'=>100);
//通过partition根据条件自动分表去更新
$res = self::partition($temparr,"id",$this->rule)
->where(array('id'=>100))->update($data);
return $res;
}
/**
* 修改数据
* $data 要删除数据的参数
*/
public function delete_data($data){
//要删除的ID
$temparr = array('id'=>100);
//通过partition根据条件自动分表去删除
$res = self::partition($temparr,"id",$this->rule)
->where(array('id'=>100))->delete($data);
return $res;
}