MySQL技术内幕-INNODB

博客介绍了MySQL多种存储引擎,如支持事务的innodb、不支持事务的myisam等,对比了myisam和innodb主键索引区别。还阐述了B树、B - 树、B+树和B*树的差异。重点讲述INNODB各版本比较、后台线程及关键特性,如插入缓冲、两次写等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储引擎

  • innodb
    支持事务;行锁;MVCC获取高并发性;聚簇索引;
  • myisam
    不支持事务;表锁;支持全文索引;数据、索引文件分离,数据文件压缩;
  • ndb
    集群存储引擎
  • memory
    数据放内存,适合存储临时数据。
    哈希索引
    表锁
  • archive
    只支持insert 和 select操作。 zlib算法压缩数据行,比例1:10。适合存储归档数据,如日志信息。 行锁,不是事务安全的。
    设计目标:提供高速的插入和压缩功能。
  • maria
    下一代myisam
    在这里插入图片描述

MySQL中myisam和innodb的主键索引有什么区别?
主要区别是myisam 索引和数据分离,而innodb 叶子节点存储数据。

参考资料:
https://www.cnblogs.com/olinux/p/5217186.html

B- 树和 B+ 树有什么区别?

B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于
走右结点;
B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键
字范围的子结点;
所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率
从1/2提高到2/3;

参考资料:
https://blog.youkuaiyun.com/qq_23217629/article/details/52510485
https://www.jianshu.com/p/332caf8bed3a

INNODB概述

各版本之间的比较

老版本的INNODB:    支持ACID,行锁设计, MVCC
INNODB1.0x        继承了上述版本的所有功能,增加了compress和dynamic页格式
INNODB1.1x        继承了上述版本的所有功能,增加了linux AIO,多回滚段
INNODB 1.2x       继承了上述版本的所有功能,增加了全文索引支持,在线索引添加

后台线程

  • Master Thread
  • IO Thread
    show variables like ‘innodb_version’\G;
show variables like 'innodb_%io_threads'\G;
*************************** 1. row ***************************
Variable_name: innodb_read_io_threads
        Value: 4
*************************** 2. row ***************************
Variable_name: innodb_write_io_threads
        Value: 4
2 rows in set (0.00 sec)
select version()\g;
+------------+
| version()  |
+------------+
| 5.6.34-log |
+------------+
1 row in set (0.00 sec)
  • Purge Thread
    事务提交后,其所使用的undolog可能不再需要,PurgeThread来回收已经使用并分配的undo页。
show variables like 'innodb_purge_threads'\G;
*************************** 1. row ***************************
Variable_name: innodb_purge_threads
        Value: 1
1 row in set (0.00 sec)
  • Page Cleaner Thread
    1.2.x 版本引入的。
    脏页刷新操作 独立到单独线程来完成。

关键特性

  • 插入缓冲 Insert Buffer (性能提升,不是直接写,快速写再做merge)
    • 使用条件:
      (1) 索引是辅助索引
      (2) 索引不是唯一的
    • 是一颗B+树,使用共享表空间
  • 两次写 double write(数据页的可靠性)
    在这里插入图片描述
mysql> show global status like 'innodb_dblwr%'\G;
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written
        Value: 5988832213
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes
        Value: 419773534
2 rows in set (0.00 sec)
  • 自适应哈希索引
  • 异步io
show variables like 'innodb_use_native_aio'\G;
*************************** 1. row ***************************
Variable_name: innodb_use_native_aio
        Value: ON
1 row in set (0.00 sec)
  • 刷新邻接页

参考资料
《MySQL 技术内幕 --innodb存储引擎》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值