mysql 细分

索引选择性 = 索引列的唯一值数量 / 表中的总行数

mysql如何优化-CSDN博客

批量问题

批处理默认是逐条发送 SQL 到数据库的,没有充分利用数据库提供的原生批处理能力,需要额外的配置来启用真正的批处理支持,如使用ExecutorType.BATCH

自定义injector 或者 mapper里面自己写sql

执行过程

  • MySQL服务器通过网络接口监听来自客户端的连接请求
  • 查询解析器解析SQL语句,检查语法是否正确,生成一个内部表示结构(如解析树
  • 基本的语义检查,如验证表和列是否存在 类型是否匹配 权限 
  • 查询优化器会对解析树进行转换和优化,以找到执行该查询的最有效方法

          优化器可能会使用批量插入优化、调整索引策略等,减少磁盘I/O和网络通信的开销

  • 估不同的执行计划,(统计信息/优化规则)并选择成本最低的那个
  1. 分析sql要做什么 表连接过滤条件,查看物理结构 类型 约束
  2. 优化器多个执行路径,扫描顺序 连接方法(嵌套 哈希连接) 使用索引
  3. 成本估计CPU IO 内存(表行数/列值分布)          
  • 基于优化器决定,生成一个详细的执行计划,描述如何执行SQL语句

           如何访问表、使用的索引、排序 分组 连接顺序、过滤条件等

  • 开始执行批量操作,批量可能使用内存
  • 批量插入,可能会使用“批量插入缓冲”技术,多个组合成一次较大的磁盘写入,减少I/O
  • 批量更新或删除,按照执行计划中的步骤,逐行或逐块地处理符合条件的记录
  • 管理并发访问,维护事务的一致性,确保在发生错误时能够回滚到一致的状态

             隔离级别,可能会使用行锁、表锁或其他锁定机制来防止多个事务同时修改同一数据

             各种并发控制策略来优化性能,例如多版本并发控制(MVCC)

             记录事务日志

  • 生成一个结果集,其中包含受影响的行数、错误信息(如果有)等 网络接口发送给客户端
  • 释放执行该操作期间占用的所有资源,包括内存、锁等
  • 不再发送其他请求,关闭连接,最小连接数可能会空闲

中间插一个事务吧 spring事务-CSDN博客 自家博客随便拿

事务隔离级别:

    读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)​

事务传播行为:

    propagation_requires_new:开启新事物,外层和内层互不影响

    propagation_required:存在则加入,否则新建

    propagation_supports:存在则加入,无则无

    propagation_mandatory:存在则加入,无则报错

    propagation_not_supported:非事务执行,挂起事务

    propagation_never:存在事务报错

    propagation_nested:有则运行在一个嵌套事务中,savepoint,嵌套事务可独立当前事务单独提交/回滚,无则required算,nestedTransactionAllowed=true;外层事务失败回滚内层,内层不影响外层

MVCC

    是一种用来解决读写冲突的无锁并发控制

快照读 当前读

三个隐式字段trxId事务id,rollptr回滚指针,rowid隐藏主键,undo日志read view三个组件

undolog删除:快照读或事务回滚不涉及该日志时,才会被purge线程统一清除

   数据更新和删除时只设置一下老记录的deletedbit,后面由purge统一清除

修改  加上  排他锁    ,拷贝到undolog中  已经有的话 链表头部  

readView 事务执行快照读 生成一个数据系统当前快照,记录并维护系统当前活跃事务id trx_list

  • 被修改数据的最新纪录中的trxId,当前其他活跃事务id比较  不符合   回滚指针 比较事务id
  • 事务id与uplimitid比较,是否小于 ? 是否大于等于lowlimitid,是否在trx_list中 ==》可见性
  • RR级别 第一次快照读创建的
  • RC每次快照读 新生成快照和readView

相关推荐

  1. 细说MySQL的3种表关联设计

    2024-05-11 08:24:05       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 08:24:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 08:24:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 08:24:05       87 阅读
  4. Python语言-面向对象

    2024-05-11 08:24:05       96 阅读

热门阅读

  1. 超级好用的C++实用库之动态库加载器

    2024-05-11 08:24:05       29 阅读
  2. axios常用配置

    2024-05-11 08:24:05       33 阅读
  3. npm详解

    2024-05-11 08:24:05       28 阅读
  4. 【服务治理中间件】consul介绍和基本原理

    2024-05-11 08:24:05       33 阅读
  5. Express中间件(完善)

    2024-05-11 08:24:05       32 阅读
  6. VUE----数字增加,兼容小程序

    2024-05-11 08:24:05       31 阅读
  7. Android Gradle的插件

    2024-05-11 08:24:05       28 阅读
  8. sass 详解

    2024-05-11 08:24:05       40 阅读
  9. 人工智能对企业安全的影响与风险控制-内刊

    2024-05-11 08:24:05       26 阅读
  10. Oracle行锁怎么杀

    2024-05-11 08:24:05       29 阅读
  11. rviz与urdf

    2024-05-11 08:24:05       31 阅读
  12. [补题记录] StarryCoding 入门教育赛3 D.电弧陷阱

    2024-05-11 08:24:05       29 阅读