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、聚簇索引和非聚簇索引

数据存储方式

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

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

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

原子(undo log)
持久(Redo Log)

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

MySQL的事务有四个隔离级别

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

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

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

一致

10、分库分表

垂直分库  业务归属

水平分库


 

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值