mysql之優化 分表

2021-09-22 11:18:27 字數 2498 閱讀 9032

案例 大資料量的使用者表

三張表:qqlogin0、qqlogin1、qqlogin2 ,將使用者id%3,按結果放入不同的表當中

create table qqlogin0( 

id int unsigned not null primary key,/* 這個id不能設定自增長 */

name varchar(32) not null default '',

pwd varchar(32) not null default ''

)engine=myisam default charset=utf8;

create table qqlogin1(

id int unsigned not null primary key,/* 這個id不能設定自增長 */

name varchar(32) not null default '',

pwd varchar(32) not null default ''

)engine=myisam default charset=utf8;

create table qqlogin2(

id int unsigned not null primary key,/* 這個id不能設定自增長 */

name varchar(32) not null default '',

pwd varchar(32) not null default ''

)engine=myisam default charset=utf8;

開發 adduser.php ,因為在新增使用者時,各個使用者id應該確認下,通常我們使用乙個輔助表 uuid 表,它可以幫助我們生成乙個編號。

uuid表:

create table uuid ( 

id int unsigned not null auto_increment primary key

)engine=myisam default charset=utf8;

我們在提供檢索時,應該根據業務的需求,找到分表的標準,並在檢索頁面約束使用者的檢索方式,而且要配合分頁。如果有大表檢索的需求,也是少數的。

新增使用者時:adduser.php

<?php

$conn

=mysql_connect

('localhost'

,'root'

,'2012o912@');

if(!$conn

)mysql_select_db

('temp'

,$conn);

$sql

="insert into uuid values (null)"

;$res

=mysql_query

($sql

,$conn);

if($res

)else

}else

?>

查詢使用者時,checkuser.php

<?php

$conn

=mysql_connect

('localhost'

,'root'

,'2012o912@');

if(!$conn

)mysql_select_db

('temp'

,$conn);

$qqid

=intval

($_get

['id'])

;$tablename

='qqlogin'

.$qqid%4

;$sql

="select * from $tablename

where id='$qqid'";

$res

=mysql_query

($sql

,$conn);

if($res

)else

?>

案例 學生答題系統

考試結果表

id stuno questionid answer(text) grade

1 1 20 [結果。。。] 30

問題表id question

20 請寫一篇散文

需求: 查處1號學生20題得分情況,但answer欄位內容非常大,對查詢速度有影響

解決:把answer(對查詢速度影響較大的字段)單獨的提出來,放到另外一張表

回答表 answer

id answer

1 結果。。。

相應的修改考試結果表

id stuno questionid grade

1 1 20 30

總結:把某個表的某些字段,這些字段,在查詢時,並不實時關心,但資料量很大, 我們建議大家可以 把這些字段單獨的放到另外一張表,從而提高效率。但是不要忘記關聯關係。表的字段定義原則是保小不保大,盡量節省空間

如果資料庫壓力很大,一台機器支撐不了,可以用mysql複製實現多台機器同步,將資料庫壓力分散

MySQL優化 分割槽

分割槽型別 range分割槽 基於乙個給定的連續區間範圍 區間要求連續並且不能重疊 把資料分配到不同的分割槽 list分割槽 類似於range分割槽,區別在於list分割槽是居於列舉出的值列表分割槽,range是基於給定的連續區間範圍分割槽 hash分割槽 基於給定的分割槽個數,把資料分配到不同的分...

mysql 分庫分表 開源 MySQL優化分庫分表

昨天面試新人的時候,遇到了這麼乙個問題,按照自己的想法大體聊了一些,但大多是感性的,並沒有完整的了解why and how.之一,為什麼要分表?分表,按形式,有水平分表和主附分表。水平分表常見於按id取模或者按日期將相同表結構的內容雜湊到不同的表上,主附分表常見於有對應關係的多張表,通過主外來鍵進行...

mysql優化 優化分頁查詢

create table goods id bigint 20 unsigned not null auto increment,name varchar 10 default null,price double default null,create time datetime default n...