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、分库分表

垂直分库 业务归属

水平分库

相关推荐
路有瑶台几秒前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
只因在人海中多看了你一眼1 分钟前
python语言基础
开发语言·python
2401_858286113 分钟前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
y25084 分钟前
《Object类》
java·开发语言
曙曙学编程5 分钟前
初级数据结构——树
android·java·数据结构
小技与小术8 分钟前
数据结构之树与二叉树
开发语言·数据结构·python
BestandW1shEs11 分钟前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
爱吃烤鸡翅的酸菜鱼13 分钟前
Java算法OJ(8)随机选择算法
java·数据结构·算法·排序算法
码蜂窝编程官方16 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
lwprain26 分钟前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat