分表技術
阿新 • • 發佈:2018-11-06
分表包括水平分表和垂直分表
分表技術有(水平分割和垂直分割)
當一張越來越大時候,即使新增索引還慢的話,我們可以使用分表
水平分表
以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}"; } //.....
垂直分割
示意圖:
一句話: 如果一張表某個欄位,資訊量大,但是我們很少查詢,則可以考慮把這些欄位,單獨的放入到一張表中,這種方式稱為垂直分割.