mysql

三大范式

  1. 保证每列的原子性。即每一个字段都不能再分割。
  2. 一张表只描述一件事情。必须满足第一大范式。
  3. 表中的字段和主键直接关联

范式和性能的问题

  • 实际开发考虑商业化的需求和目标(成本、用户体验),性能比规范性更加重要
  • 在考虑性能的同时,需要适当的考虑一下规范性
  • 故意增加一些冗余字段(为了多表查询变成单表查询)
  • 关联查询的表不得超过三张

事务三个特性
原子性、一致性、隔离性、持久性

优化数据库的方法
选取最适用的字段属性
使用连接(JOIN)来代替子查询
建立索引
优化查询语句

优化查询方法
首先看是不是大部分sql都很慢考虑下硬件优化个系统配置优化

  • 硬件的优化
    分库分表、增加服务器,加大服务器内存
  • 系统配置的优化
    增大缓存配置、增大数据库连接池
  • 数据库表结构的优化
    适当冗余数据,减少表连接
    适当拆分表,不导致表的列数过多
    默认值尽量不是null
  • SQL语句及索引的优化
    等式左侧不用函数
    详细介绍

索引的类型
按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。
按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。
按字段特性分类可分为:主键索引、普通索引、前缀索引。
按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)。

索引的数据结构(b树,hash)

  • b+树索引更适合在><和between,like
  • 哈希索引 适合查找单个

索引什么情况下会失效

  • 模糊查询以 "%"开头索引失效,因为不确定 % 的值
  • 使用复合索引时候不遵循最左原则
  • myqsl预估全表查询会比索引快的时候
  • 使用 or 的时候会失效,如果使用 or 要求条件两边都要有索引,才会使用索引,如果其中一边有一个字段没有索引,那么另一个字段上的索引也会失效
  • 索引列参与了运算
  • 字符型字段为数字时在where条件里不添加引号

事务隔离级别
引用
事务隔离级别:读未提交,读已提交,可重复读,串行化
对应问题:赃读,不可重复读,幻读
赃读:A事务查询到B事务修改的数据但是B事务还没提交可能回滚
不可重复读:A事务在B事务修改前后读的不一样
幻读:A事务读取B事务插入的数据但是未提交

回表、覆盖索引
使用innodb搜索引擎有且仅有一个聚集索引,一般默认是主键,如果没有主键就是非null的第一列。聚集索引放有所有列的数据,通过聚集索引查询可以直接查询到所有数据。

事务是如何实现的*

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容