![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 67
ordinaryBlog
offer offer快快来
展开
-
InnoDB 为什么选择 B+ 树索引
InnoDB 为什么选择 B+ 树索引首先在执行效率方面,我们希望查询效率尽可能的高、速度尽可能的快、存储空间方面我们希望他所需的空间尽可能的小哈希表哈希表查询的时间复杂度是 O(1),但是哈希表不支持区间的查询方式哈希索引的哈希值存储是无序的,哈希索引不能进行范围的查找,也不能进行排序的操作平衡二叉树随着二叉树高度的增加,二叉树查找的速度会越来越慢并且平衡二叉树也不支持快速的范围查找B 树B 树相对于平衡二叉树解决了树的高度的问题,但是依旧不能支持范围查找,在进行范围查找时需要进行回旋查找原创 2022-03-12 17:12:25 · 591 阅读 · 0 评论 -
MySQL的存储引擎
存储引擎InnoDB存储引擎支持事务,引入了行锁设计并且支持外键将数据放在一共逻辑的表空间中,从MySQL4.1开始,InnoDB存储1引擎的表单存放到一共独立的ibd文件中,默认为可重复读隔离级别MyISAM存储引擎不支持事务也不支持外键,支持全文索引,MyISAM的缓存池知缓存索引文件,而不缓存数据文件MyISAM存储引擎表由MYD和MYI组成MYD用来存放数据文件,MYI用来存放索引文件Memory存储引擎将表中的数据全部存放在内存中,如果数据库重启或发生崩溃,表中的数据原创 2022-02-12 22:50:35 · 456 阅读 · 0 评论 -
MySQL关于ACID的原理以及相关问题
MySQL关于ACID的原理以及相关问题事务事务的特性InnoDB如何实现ACID事务事务的特性原子性 A整个数据库事务都是不可分割的工作单位,只有使事务中的所有数据库操作都执行成功,事务才算成功一致性 C一致性是指事务使数据库从一种状态转移到下一种一致性状态,事务的执行之前和执行之后都必须处于一致性状态隔离性 I事务隔离性要求每个事务的读写对象对其他事务的操作对象能相互分离,即在提交之前对其他事务都不可见持久性 D事务一旦提交结果就是永久性的,即使数据库发原创 2022-02-12 17:38:32 · 668 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(七)
MySQL学习笔记count(*) 速度问题提高count性能用缓存系统保存计数在数据库中计数不同count用法count(*) 速度问题MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count() 的时候会直接返回这个数InnoDB 引擎执行 count() 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数innodb由于多版本并发控制(MVCC)的原因,多个事务count的行数不同,所以不能保存总行数。但count(*)做了优化,引擎会选择最小的普通索引树,来计数。而不原创 2021-10-17 20:29:31 · 57 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(六)
MySQL学习笔记MySQL性能瞬间下降分析什么时候会引发flush显然:以下两种情况会严重影响性能:flush速度控制影响InnoDB的刷盘速度的因素:相关参数表内数据的删除表结构表数据innodb_file_per_table表数据删除与复用删除数据插入数据更新数据如何解决这种空洞重建表optimize table、analyze table 和 alter table 这三种方式重建表的区别MySQL性能瞬间下降分析什么时候会引发flushredo log 写满。这时候系统会停止所有更新操作,原创 2021-10-17 15:33:00 · 120 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(五)
MySQL优化器的索引选择与字符串索引优化器的逻辑扫描行数怎么判断索引选择异常处理为长字符串加索引使用hash索引和倒序异同优化器的逻辑扫描行数的多少是否使用临时表是否排序扫描行数怎么判断MySQL在开始统计之前并不能精确的知道满足这个条件的记录有多少条,只能根据**索引的“区分度”**来估算记录数MySQL通过采样统计一个索引上的不同值的个数来统计区分度,不同值的个数越多,索引的区分度越好索引选择异常处理对于由于索引统计信息不准确导致的问题 analyze table t 命令,可原创 2021-10-17 11:22:51 · 72 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(四)
锁全局锁使用场景:readonly缺点表级锁表锁使用MDL使用注意如何安全的给小表加字段行锁两段锁协议死锁和死锁检测出现死锁以后策略主动死锁检测缺点 :消耗大量的CPU资源解决策略:全局锁对整个数据库实例加锁Flush tables with read lock(FTWRL)加全局读锁使用场景:全库逻辑备份可重复读隔离级别下,可使用 逻辑备份工具:mysqldump当 mysqldump 使用参数–single-transaction的时候,导数据之前就会启动一个事务,来确保拿到一致性视图也原创 2021-10-14 21:24:16 · 93 阅读 · 0 评论 -
MySQL实战45讲学习笔记(三)
MySQL的事务与索引事务特性事务的启动方式:长事务的危害索引索引分类索引类型:普通索引和主键索引的区别页的内部原理页分裂页合并覆盖索引最左前缀原则索引下推事务特性原子性一致性隔离性持久性事务的启动方式:显式的启动:begin或 start transaction。提交语句为commit,回滚事务语句是rollbackset autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一 个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存原创 2021-10-04 22:55:33 · 141 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(二)
MySQL的日志系统redo log(重做日志)作用:结构:binlog(归档日志)binlog和 redo log的区别执行一条更新语句的执行顺序redo log(重做日志)redo log为InnoDB特有的日志作用:用于记录事务操作的变化,记录的是数据修改之后的值。在MySQL宕机时,InnoDB通过redo log恢复数据,保证数据的完整性。即 保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe在一条记录更新的时候,InnoDB引擎会先把记录写入redo原创 2021-10-04 16:42:41 · 82 阅读 · 0 评论 -
MySQL实战45讲 学习笔记(一)
MySQL高级部分MySQL 基础架构什么是长链接?什么是短连接?如何选择?解决方案注意:一条查询语句的执行过程:MySQL 基础架构MySQL可以分为server层和存储引擎两个部分server包括 连接器(管理连接,权限验证)、查询缓存(命中直接返回结果)、分析器(词法分析,语法分析)、优化器(执行计划生成,索引选择)、执行器(操作引擎,返回结果)存储引擎(存储数据,提供读写接口)什么是长链接?长链接是连接成功后,如果客户端持续有请求,则一直使用同一个连接。什么是短连接?短连接是指每次执原创 2021-10-04 15:42:13 · 61 阅读 · 0 评论