-
建表规约
-
表、字段命名
- 不使用驼峰命名法
- 不使用复数名词
-
数据类型
-
小数类型为decimal
-
货币使用最小货币单位(RMB分),数据类型bigint
-
字符串长度几乎相等使用char(如身份证号)
- char比varchar节约一个字符
- 创建索引时,根据情况只取前几位
-
varchar长度不要超过5000
-
-
表里必备3个字段:
- id
- create_time
- update_time
-
建表推荐规约
- 表的命名:业务名称_表的作用
- 库名与应用名称一致
- 如果修改了字段含义或增加状态,及时更新字段注释
- 字段允许适量冗余,减少join次数,注意数据一致性!
- 单表行数超过500w行,或者表的容量超过2GB,才考虑分库分表
-
-
索引规约
-
索引的特性:
- 持久性
- 有序性
-
索引的分类:
-
按存储形式
- 聚簇索引(主键)
- 非聚簇索引(非主键)
-
数据约束
- 主键索引
- 唯一索引
- 非唯一索引
-
索引列的数量
- 单列索引
- 组合索引
-
innoDB可以创建的索引
- 主键索引
- 唯一索引
- 普通索引
-
区分:覆盖索引
- 不属于innoDB可以创建的索引
- 数据只从索引中获取而不回表,属于索引的一种使用方式。
-
-
索引可选的数据结构:
-
hash表:只适合单值查找,不适合范围查找
-
二叉查找树——最差情况退化到链表(时间复杂度:log(N))
-
平衡二叉查找树——左右子树层级最多相差1
-
btree
- 索引持久化保存在磁盘上,解决树太高时磁盘IO次数过多;如btree存储100万条Long型数据只需2层,从而提高查找速度
- 使用btree依据:Mysql(InnoDB引擎)的数据页16KB
-
b+tree
- 是Mysql(InnoDB引擎)使用的数据结构
- 中间节点不再存储数据,叶子结点存储数据是双向链表,使btree更适合范围查询
- 单张表字段过多时影响性能,设计表时应避免此种情况
-
-
索引命名规约
- 主键:pk_字段名
- 唯一索引:uk_字段名
- 普通索引:idx_字段名
-
创建索引规约
- 有唯一特性的字段必须创建成唯一索引
- 在varchar字段上建立索引时,必须制定索引长度
- 创建组合索引时,区分度最高的在最左边
-
创建索引应避免以下误解:
- 索引宁滥勿缺
- 吝惜创建索引
- 抵制唯一索引
-