前言
DAY3学习了数据库建表规范,主要学习内容
- 建表规约
- 索引规约
- SQL与ORM映射规约
- 数据库设计实战
建表规约
规定数据库一系列名称的取名规范,选择合适的数据类型与长度
数据类型
- 小数采用decimal
- 货币数据使用最小货币单位,数据类型为bigint
- 字符串长度相等选用char
- varchar长度不要超过5000
表必备三字段
- id
- create_time
- update_time
推荐规约
- 表名遵循“业务名称_表的作用”
- 库名与应用名一致
- 修改字段含义或状态追加,及时更新注释
- 字段允许适当冗余
- 单表超过500万或单标容量超过2G,才推荐分库分表
索引规约
索引名
- 主键索引名为pk_字段名
- 唯一索引名为uk_字段名
- 普通索引名为idx_字段名
创建索引规约
- 有唯一特性的字段必须建成唯一索引
- varchar字段建立索引,指定索引长度
- 建立组合索引,区分度最高在左边
SQL规约
索引
- 注意字段类型,防止隐式转换
- 利用覆盖索引
- 利用索引的有序性
- 禁止模糊查询(左模糊,全模糊)
超过三个表禁止join
COUNT
- 拒绝替代,不要使用count(列名),count(常量)代替count *
- 计算不重复行数
- 当值全是Null时,count(列名)是0,sum(列名)是null
使用isnull()来判断是否为null值
ORM映射规约
- 不使用select *
- POJO的布尔类型不使用is,数据库字段必须加is
- 查询返回结果都使用resultmap映射
- 不使用${}
- 不使用mybatis自带queryForList
- 不允许直接使用HashMap与Hashtable
- 更新数据库记录,同时更新update_time
- 不要写一个大而全更新接口
SQL优化
MySQL 提供了一个 EXPLAIN 命令 , 它可以 对 SELECT 语句的执行计划进行分析 , 并输出 SELECT 执行的 详细信息, 以供开发人员针对性优化 .
explain各列含义
- id:查询标识符
- select_type:查询的类型
- table:查询的表
- partitions:分区
- type:join类型
- possible_keys:可能选用的索引
- key:实际使用的索引
- ref:哪个字段或常数与key一起被使用
- rows:查询一共扫描多少行(估计值)
- filtered:查询条件过滤的数据百分比
- extra:额外的信息
总结
学习数据库规范是非常必要的事情,可以避免建表字段难以理解,不同项目不同风格加大协作与后期接手的难度。利用好索引能显著提高查询效率,同时应熟悉各种导致索引失效的情况。