mysql数据库底层逻辑

一、数据加载

在 MySQL 中,数据持久化存储在磁盘上,但为了高效访问,MySQL 会智能地将数据加载到内存中。Mysql在内存中构建缓冲池,当查询需要访问数据时,MySQL 首先检查缓冲池,若数据不在缓冲池:1.从磁盘读取目标页(16KB单位)2.将页加载到缓冲池的空闲页(Free List)3.将页添加到LRU List的Old Sublist头部(LRU分为两个区域:New Sublist(5/8):最近频繁访问的"热"数据,Old Sublist(3/8):新加载或较少访问的数据)

Old Sublist 移动到 New Sublist的晋升条件

1.时间阈值‌

参数 innodb_old_blocks_time(默认 1000ms)控制:

页在 Old Sublist 中停留时间超过该阈值后,‌再次被访问‌才会晋升‌,若未超时,即使被访问也不会移动(防止短期高频扫描干扰)‌。

2.‌访问频率‌

满足时间阈值后,页若被再次访问,则从 Old Sublist 移动到 ‌New Sublist 头部‌‌,此过程称为"年轻化"(promotion),标记为活跃热点数据‌。

(当缓冲池空间不足时,‌New Sublist,Old Sublist会从尾部‌开始淘汰最久未被访问的页‌)

数据存储与读取

1.InnoDB存储引擎中有页的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中中默认每个页的大小为16KB.InnoDB存储引擎将若干个地址连接磁盘块,以此来达到页的大小16KB,减少磁盘I/O次数,提高效率。

2.Mysql数据库索引的数据结构是B+Tree,好处:提高查询速度、减少磁盘IO次数、树形结构较小(通过索引找出磁盘块位置取出,加载对应数据)

你可能感兴趣的:(mysql数据库底层逻辑)