数据库设计要注意的几个点

数据库设计

字符集

  • 统一使用 utf8mb4 MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,简单的说utf8mb4才是真正的utf-8,因为它可以支持4个字节每个字符,ps:当我们要存储emoji表情就必须使用utf8mb4,性能上不会有损失

建表规范

  • 字段名必须使用小写字母

  • 小数类型为 decimal,禁止使用 float 和 double(会有精度损失)

  • 如果存储的字符串长度几乎相等,使用 char 定长字符串类型(与varchar的区别,例如,存储字符串“abc",对于char (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的varchar (10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度存储)

  • varchar 是可变长字符串,不会预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率 * 表必备三字段:id, date_create, date_update

  • 为避免关连查询,字段允许适当冗余,以高查询性能,但必须考虑数据一致。冗余字段应遵循 1.不是频繁修改的字段 2.不是 varchar 超长字段,更不能是 text 字段

  • 合适的字符存储长度,无负数的情况需要使用无符号位存储,扩大表示范围

    类型 表示范围
    unsigned tinyint 无符号位 0-255
    unsigned smallint 无符号位 0-65535
    unsigned int 无符号位 约 0-42.9亿
    unsigned bigint 无符号位 约 0-10的19次方

索引

  • 在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度即可

  • 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引

  • 索引建立需要遵循最左匹配原则。例如:建组合索引的时候,区分度最高的在最左边

  • SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts最好。

    • consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。

    • ref 指的是使用普通的索引(normal index) 。

    • range 对索引进行范围检索。

    • explain来解释执行计划,type列指的是MySQL在表中找到所需行的方式。常见类型如下:

      ALL index range ref eq_ref const,system NULL
      ALL是全表扫描,MySQL要遍历全表来找到匹配的行 索引全扫描,MySQL遍历整个索引来找到匹配的行 索引范围扫描,一般用于<、>、<=、>=、between操作 使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配单独值的记录行 唯一索引,对于每个键值,表中只有一行记录与之匹配 单表只有一个匹配行,例如根据主键或者唯一索引记性的查询
  • 范围列可以用到索引
    范围条件有:<、<=、>、>=、between等。
    范围列可以用到索引,但是范围列后面的列无法用到索引,索引最多用于一个范围列,如果查 询条件中有两个范围列则无法全用到索引。
    例如 建有(a,b,c)联合索引

    • where b>0 and a<9 只有a索引会生效
    • where b>0 and a=9 a,b 索引生效
    • where a<0 and b=9 只有a索引生效
    • where c<0 and b=9 不符合最左原则,索引不生效

分库分表

  • 单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表

... 待补充

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • MySQL数据库对象与应用 2.1-MySQL数据类型 库建立好之后基本不动,和我们接触最频繁的是表. 建表就是声...
    极客圈阅读 2,144评论 0 8
  • 第一章 总则 第1条 目的及适用范围 规范生产环境数据库设计,统一数据库设计标准。避免设计不合理造成重复犯错。 适...
    今天要开心鸭阅读 477评论 0 0
  • 很多时候,我们开发应用系统,底层的数据库表结构都需要开发人员亲自设计,设计的合理与否,关乎着整个系统的稳定性和运行...
    程序猿蛋蛋哥阅读 1,081评论 2 10
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 1,109评论 0 6
  • 一个爹厌娘亡、黑暗冷漠的疯狂公子,一个不爱红装爱武装,温暖阳光的大力小女子。 情不知所起,而一往情深。本来心如死灰...
    茳一喵阅读 455评论 4 7