Mysql知识

数据库范式

1NF(第一范式)
属性不能被分割,所有关系型数据库的基本要求。
2NF(第二范式)
消除了非主属性对于码的部分函数依赖。
3NF(第三范式)
消除了非主属性对于码的传递函数依赖。

存储过程

带逻辑控制的一些SQL语句的集合,比单纯SQL语句执行快。
缺点:应用不多,难以调试和扩展,可移植性差,消耗数据库资源。

数据库设计一般步骤

需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、运行和维护

mysql存储引擎

存储引擎MyISAM和InnoDB的区别:

InnoDB支持主外键;事务;行锁-操作时只锁定一行,不对其他行有影响,适合高并发操作;缓存索引和数据,对内存要求较高,内存大小会影响性能;

MyISAM不支持主外键,事务;表锁,即使操作一条数据也会锁整个表,不适合高并发操作;只缓存索引。

查询缓存

开启查询缓存后,会在同样的查询条件和数据的情况下,会直接在缓存中返回结果。缓存虽然提高查询效率,但会带来额外开销,每次查询后都会做一次缓存操作,失效后还要销毁。

什么是事务

事务:逻辑上的一组操作,要么都执行,要么都不执行。

事务的四大特性ACID

原子性:一组操作不可分割,要么都执行,要么都不执行

一致性:执行事务前后,数据保持一致,多个事务对同一个数据的读取结果是相同的。

隔离型:并发访问数据库时,事务之间不能互相干扰。

持久性:一个事务被提交后,对数据库的数据改变是持久的,即使数据库故障也不应该对其有任务影响。

并发事务会引发的问题

脏数据:多个事务访问同一个数据,造成数据还未修改就被其他事务读取,此时此数据可能是不正确的脏数据。

丢失修改:多个事务访问修改统一个数据,造成第一次修改结果丢失。

不可重复读:一个事务两次读取同一数据,前后读取数据值不一致。(修改)

幻读:同一个事务两次读取一组数据,第二次读取多了不存在的数据。(新增或删除)

事务隔离级别

严格程度由低到高:
read-uncommitted读取未提交
read-committed提取已提交
repeatable-read可重复读
serializable可串行化

InnoDB默认隔离级别为可重读,此级别有可能产生幻读,若使用next-key lock算法,可避免幻读。

默认为行级锁,粒度最小的锁,并发度高,但有可能会产生死锁。

分布式事务中,必须设置为可串行化的隔离级别。

索引

索引是一种用于快速查询和检索数据的数据结构,常见的索引结构:B树,B+树,hash。

优点:大大提高查询速度,唯一索引可保证每条数据的唯一性。

缺点:耗费时间,影响数据库性能,索引需要文件存储,占用空间。

索引底层数据结构

Hash表

由于hash冲突问题、不支持顺序和范围查询,mysql没有使用。

B+树索引

mysql的InnoDB和MyISAM引擎都使用的是B+索引。

MyISAM使用非聚簇索引模式,树中的data存的是数据地址。

InnoDB使用聚簇索引模式,数据文件本身就是索引文件的B+树结构。

大表优化

当单表数据量过大时,数据库读写性能会下降,常见优化措施:

限定查询数据范围:禁止不带查询条件的查询,条件越精确越好。

读写分离:主库负责写,从库负责读。

垂直拆分:把一张列比较多的表分为多张表。(竖着切)

水平拆分:表结构不变,通过某种策略将数据分片。(横着切)

分表对并发优化意义不大因为数据还在同一台机器上,水平拆分推荐分库。

分片常见方案:

客户端代理:在应用端封装jdbc层实现、sharding-jdbc、TDDL

中间件代理:后端和数据库中间增加的代理层,分片逻辑封装在中间件中。mycat、Atlas、DDB

拆分策略:根据主键取模分发

池化设计

线程池,jdbc连接池,redis连接池。

这种设计会初始预设资源,解决重复获取资源的消耗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值