表的拆分分为横向拆分(记录的拆分)和纵向拆分(字段的拆分)。
拆分表的目的:提高查询速度。
小项目,数据量就那么一点点,没必要用分库分表,这是脱裤子放屁。
在实际的使用中,踩到了热点,刘德华的博客,有80W的博客量,有3w的用户,发现随着用户和博客数的增加,查询速度日渐下降,现在要对博客表blog与用户表user进行优化。
表结构如下:
80万 博客量
create table blog(bidtitlecontentpubtimeuid) 3万 用户量 create table user(uidusernamepasswordnick......)
首先我们要决定根据哪个字段对记录进行拆分,在这里我们根据uid字段对两个表进行拆分是比较合理的。
博客表假设按每5000的数据量进行拆分,拆分成多张博客表blog1,blog2,blog3,blogN
用户表假设按每5000的数据量进行拆分,拆分成多张博客表user1,user2,user3,userN
博客表根据uid去拆分:1-5000------blog_15001-10000-----blog_210001-15000----blog_315001-20000----blog_4用户表根据uid 等分:1-5000------user_15001-10000-----user_210001-15000----user_315001-20000----user_4
这个时候,要如何查询某个人的博客呢:
先根据uid确认表名
根据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(uidregtimenameemailqqphonesex)