分表技術

wanghaitao4j發表於2018-10-12

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

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

 

當一張越來越大時候,即使新增索引還慢的話,我們可以使用分表

水平分表

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

       }

       //.....

垂直分割

 

示意圖:

一句話: 如果一張表某個欄位,資訊量大,但是我們很少查詢,則可以考慮把這些欄位,單獨的放入到一張表中,這種方式稱為垂直分割.

 

相關文章