Java之MySQL

1、数据库三大范式

每个字段不可再分,不冗余

非主键字段完全依赖于主键

2、drop 删除整张表,不可回滚;delete删除部分数据行;truncate保留表 删除所有数据

3、innodb存储引擎 支持行级锁、表级锁 支持事务 支持异常奔溃后的安全恢复

4、mysql日志文件

错误日志 记录MySQL的启动、运行和关闭过程中的错误信息

慢查询日志 可以帮助开发人员和DBA分析和优化执行效率较低的查询语句,以提升数据库性能

二进制日志 以文本形式的二进制文件存储 记录数据库的所有DDL(数据定义语言)和DML语句(数据操作语言),但不包括SELECT语句。二进制日志以二进制格式记录,可以用于数据恢复、主从复制以及数据变更的回放

重做日志(Redo Log)提交事务的持久化数据 当事务提交时,相关的修改操作会首先被记录到重做日志中,然后才会写入磁盘 是指在数据库的最小存储单元(数据页)上发生的字节级别 的变化

回滚日志(Undo Log) 事务原子性,支持事务回滚

5、sql优化

慢sql监控 慢查询日志、服务监控

直接在 select 语句之前增加 explain 关键字,就会返回执行计划的信息

优化思路------sql语句+数据库设计

避免不必要的列 slect *(尽量避免)

分页优化 回表 是指在使用索引查询时,MySQL 需要回到主表以获取完整的数据行的操作

索引优化 覆盖索引

join优化 尽量使用join语句来替代子查询

6、索引创建的注意点

建在频繁查询的字段上,不建议建在频繁更新的字段上,要对哪些区分度高的字段建立索引,同时控制索引的数量,创建组合索引而不是修改单列索引

索引会提前加载到内存当中,相当于是一个目录

7、B+树的特点

非叶子节点只存储键值,指引搜索方向

叶子节点存储实际的数据

叶子节点之间使用双向指针连接,形成有序链表,方便范围查询和排序

高度相对较低,可以减少I/O操作,提升查询性能

平衡二叉树可是每个节点只存储一个键值和数据的 B+ 树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦**,查询效率就快**

B+树的内部节点只存储关键字,而B树的内部节点需要同时存储关键字和数据。由于B+树内部节点只存储关键字,可以容纳更多的关键字,从而提高了存储容量

B+树的叶子节点形成一个有序链表,使得范围查询操作更加高效。而B树的叶子节点不一定是有序的,需要进行额外的操作才能进行范围查询,更适应范围查询

8、聚簇索引和非聚簇索引

数据存储方式

聚簇 将数据存储与索引放到了一块,非聚簇索引是将数据和索引分开存储,存储了指向聚簇索引的id

覆盖索引不管是单列索引还是联合索引,如果 select 的数据列只用辅助索引中就能够取得,不用去查主键索引,这时候使用的索引就叫做覆盖索引

最左匹配原则 在联合索引 中,如果查询语句只使用了联合索引的一部分 ,那么只有从最左边的索引开始匹配 ,才能使用该索引进行查询

9、mysql事务

原子(undo log)

持久(Redo Log)

隔离 并发控制机制(锁 多版本并发控制)

MySQL的事务有四个隔离级别

  • 读未提交------脏读
  • 读已提交------不可重复读(针对修改操作,相同查询条件返回不同的结果)
  • 默认隔离级别------可重复读 ------幻读(在同一个事务中,由于其他事务的插入或删除操作,对相同的查询条件可能返回不同的结果。)
  • 串行化------牺牲并发性能

MVCC 用于解决并发访问下的读一致性问题

  • 每个记录都有一个版本链,用于存储历史版本信息
  • 每个事务都有一个唯一的事务ID
  • 在更新记录时,将当前事务的ID和回滚指针写入新版本,并将新版本添加到版本链的头部。
  • 在读取记录时,生成当前事务的Read View,并根据Read View判断哪个版本可见
  • 当前事务只能看到在其生成Read View之前已提交的版本和当前事务自己修改的版本。

一致

10、分库分表

垂直分库 业务归属

水平分库

相关推荐
hrrrrb16 分钟前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶17 分钟前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
sdgsdgdsgc19 分钟前
Next.js企业级应用开发:SSR、ISR与性能监控方案
开发语言·前端·javascript
周杰伦_Jay1 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
rit84324994 小时前
基于MATLAB的模糊图像复原
开发语言·matlab
fie88894 小时前
基于MATLAB的声呐图像特征提取与显示
开发语言·人工智能
程序员小凯5 小时前
Spring Boot测试框架详解
java·spring boot·后端
豐儀麟阁贵5 小时前
基本数据类型
java·算法
_extraordinary_5 小时前
Java SpringMVC(二) --- 响应,综合性练习
java·开发语言
程序员 Harry6 小时前
深度解析:使用ZIP流式读取大型PPTX文件的最佳实践
java