MYSQL分表原理

随着项目的运行,mysql数据库表中的数据将会随之增加,当数据增加到一定量级的时候,比如亿级,mysql的查询会变得非常缓慢,严重影响用户体验,这个时候我们会采取分表处理。
根据用户ID与表的数量求余来进行分布,今天我们要通过求余来实现分表。

1. 建立5张用户表,字段:ID,user_name;
2. 表名分别为user_1、user_2、user_3、user_4、user_5;
3. 利用求余,将10条数据分别写入到5张表中;
4. 利用求余,查询指定ID的用户的名称;

<?php

namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;
use DB;
class User extends Model
{
    public function getAdd(){
        // $id=DB::table('user')->insertGetId($post);

        $rows=DB::table('user')->get();
        $row=[];
        foreach($rows as $k => $v){
            $row[$v->id]['id']=$v->id;
            $row[$v->id]['user_name']=$v->user_name;
        }
        foreach($row as $id => $v){
            if($id%5==1){
                $res=DB::table('user_1')->insert($v);
            }
            if($id%5==2){
                $res=DB::table('user_2')->insert($v);
            }
            if($id%5==3){
                $res=DB::table('user_3')->insert($v);
            }
            if($id%5==4){
                $res=DB::table('user_4')->insert($v);
            }
            if($id%5==0){
                $res=DB::table('user_5')->insert($v);
            }
        }
        return $res;
    }
    public function getRow($id){
        if($id%5==1){
            $row=DB::table('user_1')->where(['id'=>$id])->first();
        }
        if($id%5==2){
            $row=DB::table('user_2')->where(['id'=>$id])->first();
        }
        if($id%5==3){
            $row=DB::table('user_3')->where(['id'=>$id])->first();
        }
        if($id%5==4){
            $row=DB::table('user_4')->where(['id'=>$id])->first();
        }
        if($id%5==0){
            $row=DB::table('user_5')->where(['id'=>$id])->first();
        }
        return $row;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值