孤尽班第二次课
作者:互联网
孤尽班第二次课
数据库设计的规范
表 字段 命名
- 必须使用小写字母 或者数字
- 禁止出现数字开头
- 禁止两个下划线中间只出现数字
- 不使用
建表强制规约
数据类型
– 小数类型为 decimal
- 货币数量使用最小货币单位, 数据类型为bigint
- 字符串长度几乎相等 使用char
定长的数据类型为char 能节约空间
注意 长10 存5 有5 个空格 - varchar 长度不要超过 5000
建表推荐规约
- 表的名称最好遵循 业务名称表饿 作用
- 库名于应用名称尽量一致
- 如果修改字段含义或字段表示的状态追加时,需要及时更新字段解释
- 字段允许适当冗余,以提高查询性能,但必须数据一致
- 单表行数超过 500 万行 或者单表容量超过 2 GB ,才推荐进行分库 分表
索引规约
索引占空间 和 表得比率 是 1 :1
持久性 和 有序性
索引的分类
- 存储形式
- 非聚合索引
数据约束 - 主键所引
- 唯一索引
- 非唯一索引
索引类的数量
6. 单行索引
7. 组合索引
Innodb 可以创建的索引
8. 逐渐索引
9. 唯一索引
10.普通索引
不可以 创建的索引- 》 覆盖索引
索引的数据结构 二叉查找树
索引btree 以16k为单位
键值: 即表中记录的主键
指针: 存储 子节点 地址信息
数值: 即表记录中除主键外的数据
索引的数据结构:b+tree
键值, 即表中记录的主键
指针,存储子节点地址信息
数据, 即表记录中除主键外的数据
索引名称规则
索引命名
- 主键索引名为pk_ 字段名
- 唯一索引名为uk_ 字段名
- 普通索引名则为idx_ 字段名
创建索引规约
- 有唯一特性的字段必须建成唯一索引
- 在varchar 字段上建立索引时,必须指定索引长度
- 建组合索引的时候,区分度最高的在最左边
创建索引避免如有如下极端误解
- 索引宁缺勿滥(认为一个查询就要建 一个索引)
- 吝啬索引创建 (认为创建所应会消耗空间,严重拖慢记录的更新以及行放入新增速度)
- 抵制唯一索引 认为 唯一索一律 需要通过应用层 通过先查后插方式解决
SQL 规约
优化SQL 语句的要点
Explain 的使用指南
SQL 规范- 索引
- 注意字段类型 【防止因字段类型不同造成的隐式转化,导致索引 失效】
- 利用覆盖索引【利用覆盖索引来技能型查询操作,避免回表】
- 利用有序性 如果有order by d的场景,请注意利用索引的有序性
- 禁模糊 【页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决】
超过三个表 禁止用 join on
SQL 规约 - count
- 拒绝替代 【不要使用count (列名) 或者 count( 常量) 来 替代 count(*)】
- count(distinct col) 计算该列除NULL 之外的 不重复行数
- 当某一列的值 全 是NULL , count (col) 的返回 结果 为0 , 但sum(col) 的 返回结果为 NULL
SQL 规则- 分页
- 若count 为 0 【 分页查询逻辑时,若count 为 0 应直接返回】
- 优化超多分页场景【利用延迟关联或者子查询优化超多分页场景】
SQL 规则- null 值
使用ISNULL() 来判断是否为NULL 值
- NULL <> NULL null <> null 的返回结果是NULL , 而不是flase
- NULL= NULL 的返回结果是NULL, 而不是true
- null<> 1 NULL<> 1 的返回结果是NULL , 而不true
SQL 性能优化的目标
Explain 工具使用技巧
达到range 级别
Explain+ 覆盖索引
Explain + index 全索引扫描
Expain + filesort
ORM 映射规约
优化SQL 语句的要点
Explain 的 使用指南
ORM 映射的避坑 指南
ORM 映射规约
- 在表查询中, 一律不要使用“ 作为查询的字段列表”
- POJO 类的布尔属性 不能加 is , 而数据库字段必须加 “is_”
- 查询返回结果都需要 使用 ResultMap 映射
- 不要使用${}
- 不要使用 MyBatis 自带的queryForList 方法
- 不允许 直接使用 HashMap 于 Hashtable 接受结果集
- 更新数据表记录时 必须 同时更新 update_time
- 不要 写一个 大而全的数据库更新接口
标签:count,规约,主键,索引,SQL,第二次,NULL,孤尽班 来源: https://blog.csdn.net/weixin_44681349/article/details/121022355