当前位置: 首页 > news >正文

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

垂直分库  业务归属

水平分库


 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Unity]关闭URP的SRP,开启GPU Instancing。
  • Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测
  • 代理服务器在HTTP请求中的应用:Ruby实例
  • 腾讯二面 智力题 赛马问题
  • 腾讯大模型算法实习生面试题
  • 二.PhotoKit - 相册权限(彻底读懂权限管理)
  • 程序员变副业达人:AI绘画月入5千+,看我如何用技术打造自媒体收益流
  • 数据结构--树与二叉树
  • 网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业
  • Python编码系列—Python 异步编程:asyncio 的魔法与实战
  • ArduPilot开源代码之FMU+IOMCU设计
  • Java中的中介者模式:解耦复杂系统的有效策略
  • 向上or向下调整建堆 的时间复杂度的本质区别的讲解
  • git 不跟踪某些文件的几种方式
  • Honeybee Locality-enhanced Projector for Multimodal LLM
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • ➹使用webpack配置多页面应用(MPA)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • docker-consul
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git初体验
  • nginx 配置多 域名 + 多 https
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React+TypeScript入门
  • Redis的resp协议
  • 程序员该如何有效的找工作?
  • 观察者模式实现非直接耦合
  • 聚类分析——Kmeans
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 人脸识别最新开发经验demo
  • 如何使用 JavaScript 解析 URL
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 异步
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #大学#套接字
  • #每日一题合集#牛客JZ23-JZ33
  • $nextTick的使用场景介绍
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (33)STM32——485实验笔记
  • (done) 两个矩阵 “相似” 是什么意思?
  • (九)信息融合方式简介
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ***通过什么方式***网吧
  • .net core 6 redis操作类
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net Web项目创建比较不错的参考文章
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • ::什么意思
  • @angular/cli项目构建--http(2)
  • @ComponentScan比较