一、简介

表的拆分分为横向拆分(记录的拆分)和纵向拆分(字段的拆分)。
拆分表的目的:提高查询速度。

二.横向拆分

横向拆分:就是表结构是完全一样,然后把一张表的数据分割到多张表中。
    
比如:某某博客,有80W的博客量,有3w的用户,发现随着用户和博客数的增加,查询速度日渐下降,现在要对博客表blog与用户表user进行优化。

表结构如下:

博客表
create table blog(
         bid
         title
         content
         pubtime
         uid
     ) 
  
 用户表
 create table user(
         uid
         username
         password
         nick
         ......
     )

首先我们要决定根据哪个字段对记录进行拆分,查询决定了拆分,在这里我们根据uid字段对两个表进行拆分,拆分成blog1,blog2,blog3,blogN和user1,user2,user3,userN

博客表根据uid去拆分:
     1-5000------blog_1
     5001-10000-----blog_2
     10001-15000----blog_3
     15001-20000----blog_4
     
 用户表根据uid 等分:
     1-5000------user_1
     5001-10000-----user_2
     10001-15000----user_3
     15001-20000----user_4

这时要怎么查询某人的博客:

根据uid确认表名:
     $num=ceil(9527/5000);
     select uid,bid,title,pubtime from blog_$num where uid=9527;

二.纵向拆分

纵向拆分:把活跃字段(常用)、惰性字段(不常用)分开。这时候表结构不一样了。

比如:人员表,活跃字段像用户名、密码、昵称等,惰性字段像手机号、邮箱、性别等不经常使用和修改的字段。

一张完整的用户表可以拆分为两张表,如下:

create table user(
     uid int key auto_increment,
     username char(20),
     password char(32) not null,
     nick char(10)
 );
 create table user_ext(
     uid
     regtime
     name
     email
     qq
     phone
     sex
 )