数据库

Posted by jabin on December 11, 2018

一、三大范式

  1. 第一范式:每个字段是不可拆分的
  2. 第二范式:所有字段依赖于主键,一个表只描述一件事
  3. 第三范式:每个字段不能间接依赖主键,比如用户名称不能出现在订单表中

二、MySQL

1. InnoDB和MyISAM的区别

  事务 速度 外键 行级锁
InnoDB 支持 较慢 支持 支持
MyISAM 不支持 不支持 不支持

2. 优化

2.1 核心

  1. 数据量预估,合理分库、分表
  2. 充分利用mysql缓存, 不如时间用变量

2.2 字段

  1. 少用或者拆分TEXT/BLOB
  2. 不存图片

2.3索引

  1. 字符字段加前缀索引(idx_xxx)
  2. 不在索引做运算

2.3 SQL类

  1. 拒绝大sql
  2. 事务范围小
  3. 尽量不用select *
  4. 不用OR, 用IN

2. 索引

  类型
InnoDB 聚类索引
MyISAM 非聚类
  1. MySAM的索引文件和数据文件是分离的, B+树叶子节点的data域只保存数据的地址。 InnoDB节点的data域保存了完整的数据记录, 所以是聚类索引
  2. 辅助索引,InnoDB需要先查到主键,然后再去主索引拿到记录
  3. 读MyISAM快, 写innodb快

三、NoSQL

不支持事务, 占用空间大, 维护较难

1. MongoDB

  1. 弱一致性
  2. 文档结构
  3. 大数据集搜索
  4. 性能