一、Mysql
1)、引擎
InnoDB:
- 支持行锁,
- 支持事务、
- 支持外键,
- count(*)会遍历整张表,
- 索引保存行地址,允许无索引或主键表存在
MyISAM:
- 不支持行锁,
- 不支持事务,
- 不支持外键,
- 保存表的总行数count(*),
- 无主键或非空唯一索引时则会自动生成一个6字节的主键
2)、索引
InnoDB底层存储结构为B+树,B+树的每个叶子节点对应innodb的一个page,page大小固定,一般为16k。其中非叶子节点只有键值,叶子节点含有数据。
建立索引原则:
- 选择唯一性索引
- 为经常需要排序、分组和联合操作的字段建立索引
- 为常作为查询条件的字段建立索引
- 限制索引的数目
- 尽量使用数据量少的索引
- 删除不再使用或很少使用的索引
3)、优化
- 使用索引
- 使用连接(join)代替子连接
- 使用union代替临时表
- 使用explain分析sql语句查询是否走索引
4)、隔离级别
- 未提交读:幻读、不可重复读、脏读
- 已提交读:幻读、不可重复读
- 可重复读:幻读
- 序列化:无
- 脏读:事务B读取到了事务A未提交的数据
- 幻读:事务B发生在事务A操作之间提交事务,导致事务A两次或多次查询条数不一致
- 不可重复读:一个事务执行过程中多次查询返回不同查询结果
- 幻读和不可重复读区别:而幻读针对的是一批数据整体(比如数据的个数),不可重复读查询的都是同一个数据项,
4)、数据库三范式
- 数据库中的每一个字段都是不可再分的
- 数据库表中的非主属性只依赖于主键
- 不存在对非关键字的传递依赖关系
5)、分库分表
垂直切分:将表按照功能模块,部署到不同的库上
水平切分:将表中数据按照时间等分配规则存储到多个结构相同的表中