WHCSRL 技术网

T31-DAY3-Mysql设计原则_zack

一、建表规约

  • 必须使用小写字符或者数字
  • 禁止出现数字开头
  • 禁止两个下划线中间只出现数字
  • 不适用负数名词
  • 禁用保留字

(1)数据类型:

  • 小数类型为decimal
  • 货币数据使用最小货币单位,数据类型为Bigint
  • 字符串长度几乎相等使用char
  • varchar长度不要超过5000,否则使用text

(2)表必备三个字段

  • id
  • create_time
  • update_tim

(3)建表建议

  • 表的命名最好是遵循“业务名称加表的作用”
  • 库名与应用名称尽量一致
  • 如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释
  • 字段允许适当冗余,以提高查询性能,但必须考虑数据一致
  • 单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表

二、索引规约

(1)索引基本概念:

 

(2)索引的数据结构进化论

1、二叉查找树

二叉查找树,是有序的,理想状态的时候是平衡的,可以实现折半查找。如果状态不理想的时候,会导致形成链表,查找效率为O(N),不符合要求。

平衡二叉查找树,当数据量太多的时候,层级会特别高,根节点遍历到目标值,就需要多次IO,查询效率也会很低。

2、btree

是一个多叉树,之前多叉树,每次一个节点只能存储一个数据,但是mysql每次读取的单位为16K,每个节点只有一个数据是一种浪费,所以B+TREE每次读取一个磁盘块(16k),提高效率。但是因为数据在节点上,如果范围查询的话,还是需要多次遍历,所以不适合

 

3、b+ tree

 节点都只有索引值和指针,数据都在叶子节点中,便于范围查询。

(3)索引不明

  • 主键搜因名为pk_字段名
  • 唯一索引名为uk_字段名
  • 普通索引名为idx_字段名

(4)创建索引

  • 有唯一特性的字段必须建成唯一索引
  • 在varchar字段上建立索引时,必须指定索引长度
  • 建组合索引时,区分度最高的在最左边

三、SQL规约

(1)索引

 (2)join

阿里巴巴手册规定,超过三个表禁止join

 (3) count

 (4)分页

 (5)null值

 

(6)闭坑指南

 

(7)SQL性能优化

见另外一篇文章

四、ORM映射规约

  1. 在表查询中,一律不要使用*作为查询的字段列表
  2. POJO类的布尔属性不能加is,数据库的字段必须加is
  3. 查询返回结构都需要使用resultmap映射
  4. 不要使用${},sql注入
  5. 不要使用mybatis自带的queryforlist方法,会查询出所有数据
  6. 不允许直接使用hashmap和hashtable接受结果集
  7. 更新数据表记录时,必须更新update_time
  8. 不要写一个大而全的更新sql

推荐阅读