
MySQL
文章平均质量分 89
存储原理和Innodb引擎原理
xianghan收藏册
从专注于Java方向的高级架构师,转变为AI大模型技术专家。目前从事智能驾驶领域。
展开
-
10-MySQL原理-索引失效索引匹配最全详解
索引失效分析和索引匹配最全详解原创 2022-06-17 08:22:40 · 354 阅读 · 0 评论 -
9-MySQL原理-执行计划最全详解
基于成本和规则优化生成执行计划,然后再按照执行计划执行查询。本文主要介绍`EXPLAIN`各输出项的含义,从而帮助大家更好的进行sql性能优化!原创 2022-06-17 08:17:37 · 424 阅读 · 0 评论 -
8-MySQL原理-MySQL回表与解决方案
聚簇索引(ClusteredIndex)普通索引(SecondaryIndex)聚簇索引查找过程普通索引查找过程第一步普通索引查找过程第二步通过索引覆盖去优化回表查询的情况[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03EcF3H1-1655216482977)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0ad891c7fd524c8491f73843f14............原创 2022-06-14 22:23:36 · 615 阅读 · 0 评论 -
7-MySQL原理-事务底层实现
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。innod原创 2022-06-14 22:20:30 · 218 阅读 · 0 评论 -
6-MySQL原理-索引匹配原则
离散性最好的列:越大离散型越好 count(distinct col):count(col) 理解为差异性。结论:离散性越高选择性就越好,比如有一个性别的字段的索引,假设男为1,女为0:就会生成一下一个索引树:这个时候要搜索女的数据,那么在根节点触发,可以由两条路可以走,从中间走下去的话发现可以选择的线路太多了,这样会导致搜索引擎懵逼,优化器觉得既然要搜索这么多数据,还不如全表扫描呢,这就导致离散型降低。不利于性能。对索引中关键字进行计算(对比),一定是从左往右依次进行,且不可跳过,在创建数据库的时候需要选原创 2022-06-13 23:11:40 · 1146 阅读 · 0 评论 -
5-MySQL原理-存储引擎与索引结构
索引是为了加速对表中数据行的检索而创建的一种分散存储的(不连续的)数据结构,硬盘级的。索引意义:索引能极大的减少存储引擎需要扫描的数据量,索引可以把随机IO变成顺序IO。索引可以帮助我们在进行分组、排序等操作时,避免使用临时表。正确的创建合适的索引是提升数据库查询性能的基础。索引是搜索引擎去实现的,在建立表的时候都会指定,搜索引擎是一种插拔式的,根据自己的选择去决定使用哪一个。MyISAM存储引擎MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址(叶节点data域)。主键索引(prim原创 2022-06-13 23:06:45 · 281 阅读 · 0 评论 -
4-MySQL原理-SQL执行原理
Adaptive Hash index属性使得InnoDB更像是内存数据库。该属性通过innodb_adapitve_hash_index开启,也可以通过—skip-innodb_adaptive_hash_index参数关闭而B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般3-4层,故需要3-4次的查询。innodb会监控对表上个索引页的查询。如果观察到建立哈希索引可以带来速度提升,则自动建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)。AHI有一原创 2022-06-12 23:55:27 · 517 阅读 · 0 评论 -
3-MySQL原理-InnoDB架构与数据一致性
InnoDB对于对于DML语句操作(如Update或Delete),事务提交时只需在缓冲池中完成操作,然后再通过Checkpoint将修改后的脏页数据刷新到磁盘。InnoDB有两种CheckpointSharp Checkpoint:数据库关闭时将所有脏页刷新回磁盘Fuzzy Checkpoint:重做日志是为了保证事务的原子性,持久性。(防止宕机后不一致)InnoDB采用Write Ahread Log策略,事务提交时,先写重做日志,再修改页。数据库宕机重启时通过执行重做日志恢复数据。但由于Che原创 2022-06-12 23:50:34 · 442 阅读 · 0 评论 -
2-MySQL原理-InnoDB架构与内存管理
Master Thread 。负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括IO Thread InnoDB大量使用异步IO(AIO)来处理请求,来提高数据库性能。Purge Thread。事务被提交后,undolog就不需要了,Purge Thread用来回收已经分配的undo log页。注意:Purge Thread需要离散地读取undo页。Page Cleaner Thread 1.2以后引入,将Master Thread中刷新脏页的工作移至该线程。主要工作:InnoDB内存池主要.....原创 2022-06-10 07:42:58 · 198 阅读 · 0 评论 -
1-MySQL原理-设计架构
MySql中有以下组件Connectors组件,是MySQL向外提供的交互组件,如java,.net,php等语言可以通过该组件来操作SQL语句,实现与SQL的交互。提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等负责监听对客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。......原创 2022-06-10 07:41:52 · 261 阅读 · 0 评论 -
MySQL之Double Write
InnoDB 的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进行操作的。而计算机硬件和操作系统,在极端情况下(比如断电)往往并不能保证这一操作的原子性,16K的数据,写入4K 时,发生了系统断电/os crash ,只有一部分写是成功的,这种情况下就是 partial page write 问题。 很多DBA 会想到系统恢复后,MySQL 可以根据redolog 进行恢复,而mysql在恢复的过程中是检查page的checksum....原创 2022-06-09 23:46:28 · 289 阅读 · 0 评论 -
MySQL LRU内存淘汰机制
MySQL使用了LRU淘汰算法,LRU也就是least recently use,最近最少使用。策略就是使用的缓存页就加到LRU链表的头部,只要修改或者查询过就会移到链表头部,最后淘汰LRU尾部的。原创 2022-06-09 23:26:54 · 875 阅读 · 0 评论