QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1403|回复: 0
打印 上一主题 下一主题

数据库结构的优化

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-4-24 18:13 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    9 l& ~5 o7 C6 d. _) @; c) M9 L; a
    数据库结构的优化, ?% f* V  j& x% L; @
    1、选择合适的数据类型, `1 x: L; t+ D; T+ O, o, j9 X
    数据类型的选择,重点在于“合适”二字,如何确定选择的数据类型是否合适了?, g8 H9 ?/ p: |/ z8 P
    1、使用可以存下你的数据的最小的数据类型。(时间类型数据:可以使用varchar类型,可以使用int类型,也可以使用时间戳类型)
    0 P; d: L& c- Z: w2、使用简单的数据类型,int要比varchar类型在mysql处理上简单。(int类型存储时间是最好的选择)
    # Z  B2 U. T! w3、尽可能的使用not null定义字段。(innodb的特性所决定,非not null的值,需要额外的在字段存储,同时也会增加IO和存储的开销)
    ) y4 u9 Z9 b9 @0 W4、尽量少用text类型,非用不可时最好考虑分表。. \+ _1 }6 \8 w, {' [* _  ?' d7 i
    + M+ w% J" }3 k) ^' y7 O0 [
    2、数据库表的范式化优化
    . O3 J& d( E8 Z+ V范式化是指数据库设计的规范,目前说道范式化一般是指第三设计范式。也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。1 H$ a; i: [: V$ P

    9 `( U1 }, `  y1 m反范式化
    % q, }: x6 n% v9 i6 s5 [& j反范式化是指为了查询效率的考虑把原本符合第三范式的表“适当”的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。
    * x2 ^# ^- m& y* Q$ ]/ s" [; E: |+ K: I; U6 B( [
    3、数据库表的垂直拆分
    ' ~5 v1 G2 P1 B' l8 _) e6 E垂直拆分定义0 \. C. [4 G6 u0 G6 h9 f
    所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。
    : i6 k( \0 j7 J! g/ q. K垂直拆分原则% H7 Z* I2 p! ~6 N" Z, J& j8 z+ C
    通常垂直拆分可以按以下原则进行:8 O4 B( Y- j" r
    1、把不常用的字段表单独存放到一个表中。  U& f0 `  S1 a8 d# ^
    2、把大字段独立存放到一个表中。
    " p. J8 E6 ^0 R( I8 m3、把经常一起使用的字段放到一起。
    ; P. {! r* [; r; @5 K6 ?" R
    - ]8 \0 o: K8 q/ E/ \% W) M4 |- r3 s4、数据库表的水平拆分7 d) W( B; q& k# K

    ' j8 H# Q% e, u3 N为什么水平拆分) d8 \) T2 s& v: E+ ]
    表的水平拆分是为了解决单表数据量过大的问题,水平拆分的表每一个表的结构都是完全一致的
    6 l" @) P) ~7 J6 k8 |" _( D' s1 X6 _1 X8 c; Z  y9 m
    水平不拆分原因" d# T+ T! _+ e' i, c8 o
    如果单表的数据量达到上亿条,那么这时候我们尽管加了完美的索引,查询效率低,写入的效率也相应的降低。) V# s4 J% V& Y( h( q' b3 _

    3 I0 X. C7 f6 K$ |, ?; y如何将数据平均分为N份: V' A0 @; ?, R
    通常水平拆分的方法为:
    2 l  Y' _, |) c6 l* h4 u  \1、对customer_id进行hash运算,如果要拆分为5个表则使用mod(customer_id,5)取出0-4个值。
    9 S- ^$ A7 d* I* k# w& r* q2、针对不动的hashid把数据存储到不同的表中。0 l8 w& x& O7 B. m( f
    % v) B9 n* k% L! t  W. [/ j: }/ r
    水平拆分面临的挑战
    " \  R' ]1 Q" ]1 d2 l) K+ [6 A. u& N9 T! V
    1、夸分区表进行数据查询
    - u* n5 ]' i8 V  e0 |2 t0 R前端业务统计:8 J  X) F1 ?- E9 T
    业务上给不同的用户返回不同的业务信息,对分区表没有大的挑战。7 l9 ?5 d, u5 p2 ?7 R# j5 ?3 S
    2、统计及后台报表操作
    . n8 q" F% l- b( f1 }但是对后台进行报表统计时,数据量比较大,后台统计时效性比较低,后台就用汇总表,将前后台的表拆分开。' P- K# b0 W+ N7 [! y
    ————————————————. {! B  y' ^" p0 R: I& l$ p/ V6 t- r
    版权声明:本文为CSDN博主「Cgy25」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 i3 b4 ~: V+ W( V; E
    原文链接:https://blog.csdn.net/Cgy25/article/details/105690070( u8 X0 W9 T+ z; z7 r' {) Z
    6 }3 F  u4 W( W0 d. [% o7 P

    ! V5 k9 w% S% k
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-20 23:40 , Processed in 0.408068 second(s), 51 queries .

    回顶部