分表技术

分表包括水平分表和垂直分表

分表技术有(水平分割和垂直分割)

 

当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表

水平分表

以qq用户表来具体的说明一下分表的操作.

思路如图 :

首先我创建三张表 user0 / user1 /user2 , 然后我再创建 uuid表,该表的作用就是提供自增的id,

思路是根据ID除以3取余,余数为0/1/2不同,分别在三张表中,插入和查询都需要走这一步。

 

走代码:(韩顺平老师的PHP代码)

create table user0(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd  varchar(32) not null default '')

engine=myisam charset utf8;



create table user1(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd  varchar(32) not null default '')

engine=myisam charset utf8;



create table user2(

id int unsigned primary key ,

name varchar(32) not null default '',

pwd  varchar(32) not null default '')

engine=myisam charset utf8;





create table uuid(

id int unsigned primary key auto_increment)engine=myisam charset utf8;

编写addUser.php

<?php



       //注册一个用户

       $con=mysql_connect("localhost","root","root");

       if(!$con){

              die("连接失败!");

       }

       mysql_select_db("temp",$con);



       $name=$_GET['name'];

       $pwd=$_GET['pwd'];



       //这时我们先获取用户id,id是从uuid表获取

       $sql="insert into uuid values(null)";

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

              $id=mysql_insert_id();

       }



       //计算表名,就是,你应该把这个用户放入到哪个表

       $talname='user'.$id%3;

       $sql="insert into {$talname} values ($id,'$name','$pwd')";

       if(mysql_query($sql,$con)){
              echo '添加用户到 '.$talname.'ok';

       }

       mysql_close($con);

      

//
<?php



       //注册一个用户

       $con=mysql_connect("localhost","root","root");

       if(!$con){

              die("连接失败!");

       }

       mysql_select_db("temp",$con);

       $id=intval($_GET['id']);



       //计算表名

       $tabname='user'.$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}";

       }

       //.....

垂直分割

 

示意图:

一句话: 如果一张表某个字段,信息量大,但是我们很少查询,则可以考虑把这些字段,单独的放入到一张表中,这种方式称为垂直分割.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值