mysql-水平分表-垂直分表

https://blog.csdn.net/qq_17392301/article/details/45501597?utm_source=blogxgwz4

Mysql的分表技术 
水平分割技术:->以qq用户登录为例: 


创建uuid表
create table uuid (id int unsigned primary key auto_increment);

创建3张用户表
create table qqlogin0
(id int unsigned primary key,
name varchar(32) not null default '',
pwd char(32) not null default '')engine=myisam  charset utf8;

create table qqlogin1
(id int unsigned primary key,
name varchar(32) not null default '',
pwd char(32) not null default '')engine=myisam  charset utf8;

create table qqlogin2
(id int unsigned primary key,
name varchar(32) not null default '',
pwd char(32) not null default '')engine=myisam  charset utf8;

register.php

    //完成注册
    $name=$_GET['name'];
    $pwd=$_GET['pwd'];

    if(empty($name)||empty($pwd)){
        die('fail');
    }

    $con=mysql_connect('localhost','root','root');
    if(!$con){
        die('err');
    }
    mysql_select_db('temp');

    $sql="INSERT INTO uuid values(null)";

    if(mysql_query($sql,$con)){

        $id=mysql_insert_id();
        //确定把这个用户添加到哪个表
        $tabname='qqlogin'.$id%3;
        $pwd=md5($pwd);
        $sql="INSERT INTO $tabname values($id,'$name','$pwd')";

        if(mysql_query($sql,$con)){
            echo '编号为 '.$id.' 用户添加到'.$tabname;
        }else{
            echo '添加失败';
        }

    }

login.php

    //完成登录
    $id=$_GET['id'];
    $pwd=$_GET['pwd'];

    if(empty($id)||empty($pwd)){
        die('fail');
    }

    $con=mysql_connect('localhost','root','root');
    if(!$con){
        die('err');
    }
    mysql_select_db('temp');

    $tabname='qqlogin'.$id%3;

    $sql="SELECT pwd FROM $tabname WHERE id=$id";
    $res=mysql_query($sql,$con);
    if($row=mysql_fetch_assoc($res)){

        echo '在'.$tabname.'存在 id为='.$id;
    }else{
        echo '错误.或者用户不存在!';
    }

对水平分割的考虑. 
②其它的条件 
思考: 如果我们做的是一个平安保险公司的一个订单(8999999999000000条)查询功能. 
,如何处理海量表?->按时间. 
分表的标准是依赖业务逻辑(时间/地区/….) 
安装字符不同. a-z 
我们给用户提供的查询界面一定是有条件,不能让用户进行大范围.(世界),如果需要的可以根据不同的规则,对应多套分表. 
检索时候,带分页条件,减少返回的数据. 
项目中,灵活的根据需求来考虑->需求

垂直分割:

所谓垂直分割,就是把某表的大字段,并且不是经常查询,单独的放入到一张表去,比如下面案例: 

 

你可能感兴趣的:(mysql-水平分表-垂直分表)