• Mysql表的横向拆分与纵向拆分及简单案例


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

      1.横向拆分

        我们从一个案例去解释,情景是这样的:某某博客,有50W的博客量,有2w的用户,发现随着用户和博客数的增加,查询速度日渐下降,现在要对博客表blog与用户表user进行优化。

      表结构如下:

     1 create table blog(
     2         bid
     3         title
     4         content
     5         pubtime
     6         uid
     7     ) 50万
     8 create table user(
     9         uid
    10         username
    11         password
    12         nick
    13         ......
    14     )  2万

      首先我们要决定根据哪个字段对记录进行拆分,查询决定了拆分,在这里我们根据uid字段对两个表进行拆分是比较合理的。

     1 博客表根据uid去拆分:
     2     1-5000------blog_1
     3     5001-10000-----blog_2
     4     10001-15000----blog_3
     5     15001-20000----blog_4
     6 人员表根据uid 等分:
     7     1-5000------user_1
     8     5001-10000-----user_2
     9     10001-15000----user_3
    10     15001-20000----user_4  

      比如查询某人的博客:

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

      2.纵向拆分:把活跃字段(常用)、惰性字段(不常用)分开。

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

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

     1 create table user(
     2     uid int key auto_increment,
     3     username char(20),
     4     password char(32) not null, 
     5     nick char(10)
     6 );
     7 create table user_ext(
     8     uid
     9     regtime
    10     name
    11     email
    12     qq
    13     phone
    14     sex    
    15 )

      

  • 相关阅读:
    Java基础00-模块36
    Java基础00-反射35
    Java基础00-Stream流34
    Java基础00-函数式接口33
    Java基础00-方法引用32
    运用龙格库塔法解大雷洛数平板绕流问题
    LB 学习日记
    Numba学习日记 —— 2019-12-5
    文件的操作及相关异常的处理
    time模块的两个函数time.clock()和time.time()的区别
  • 原文地址:https://www.cnblogs.com/yuanwanli/p/9023872.html
Copyright © 2020-2023  润新知