MySQL索引详解:MyISAM与InnoDB的B+树区别
MySQL中的MyISAM与InnoDB存储引擎在索引实现上都采用了B+树结构,那么它们之间具体有哪些区别呢?今天我们就来详细聊聊这个话题。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
首先,我们创建一张示例表,SQL语句如下:
CREATE TABLE `t_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(16) DEFAULT NULL,`email` varchar(32) DEFAULT NULL,`phone` varchar(11) DEFAULT NULL, PRIMARY KEY (`id`),KEY `k_name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
除了主键id字段外,我们还在name字段上添加了一个普通索引,并插入了6条测试数据:
图片
1.MyISAM
MyISAM将索引文件与数据文件分开存储,索引文件仅保存数据记录所在的数据页地址。
1.1 主键索引
MyISAM存储引擎使用B+树索引结构,其非叶子节点存储索引键值,而叶子节点则保存了主键值及对应的数据记录地址。由于叶子节点不直接存储实际数据,这种索引方式被称为“非聚集索引”。
图片
1.2 非主键索引
主键索引与非主键索引在结构上完全一致,唯一的区别在于非主键索引允许出现重复的键值。下面我们来看一下k_name这个索引的具体结构:
图片
2.InnoDB
与MyISAM不同,InnoDB采用B+树组织成聚集索引,其主键索引的叶子节点保存了完整的数据记录。因此InnoDB的数据文件本身即为索引文件。
2.1 主键索引
InnoDB主键索引的键值为主键值,而数据域则保存了完整的数据行记录。如下图所示:
图片
2.2 非主键索引
InnoDB的普通索引键值保存索引字段值,数据域则存储对应记录的主键值,查询时需要先通过普通索引找到主键,再根据主键回表查询完整记录。如下图所示:
图片
3.总结
虽然MyISAM和InnoDB存储引擎都使用B+树索引,但二者的索引结构存在本质区别:一种是聚集索引,另一种则是非聚集索引。
相关攻略
Socket连接(准确说是Unix域套接字,Unix Domain Socket,UDS)是MySQL为本地进程间通信设计的专属连接方式,它并非网络协议,而是基于操作系统文件系统实现的进程通信机制。
新智元报道编辑:LRST【新智元导读】ContextBench首次从「过程」评测代码智能体,不再只看是否修好代码,而是追踪它是否精准找到并真正使用了关键代码片段,揭示了当前模型多读少用、被关键词误导
在之前的文章中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。 《两个小公举,调试MySQL死锁必备!》中,举了一个强制类型转换导致死锁的例子,有朋友
MySQL 索引优化不用追求复杂,把以下五个基础技巧用熟,就能解决80%的索引问题。 MySQL索引优化是提升SQL查询效率的核心方法,用好索引能让慢查询“飞起来”,用不好反而会拖垮数据库。今天整理
今天和大家聊一个让无数 DBA 抓狂的问题:MySQL 异常宕机后,重启卡在 InnoDB。 今天想和大家聊一个让无数DBA抓狂的问题:MySQL异常宕机后,重启卡在“InnoDB: Startin
热门专题
热门推荐
可通过电子税务局 、随申办App 小程序、个税APP三种方式查询下载个税纳税记录:电子税务局需登录后搜索或按路径进入,下载PDF用身份证后6位解密;随申办依托统一认证,支持直接保存
3月26日,在SEMICON China 2026“半导体智能制造-未来工厂”论坛上,一场关于半导体制造AI未来形态的思想碰撞引发行业瞩目。智现未来董事长兼CEO管健博士受邀登台,发表题为《从“+A
南都讯 记者李洁琼 3月28日,珠海天际航空科技有限公司在金湾区天章产业园开业。作为珠海低空经济产业的新锐力量,天际航空智能制造基地的投运,标志着金湾区在载人级飞行器制造领域迈出关键一步,为珠海“天
来源:中国新闻网中新社杭州3月27日电 (鲍梦妮)随着机器人产业发展以及春晚机器人表演等热点带动,今年以来,中国多地机器人租赁业务持续升温。在上海上线的全球首个开放式机器人租赁平台“擎天租”,自去年
大象新闻·大象财富记者 李莉 张迪驰315消费者权益日刚过,广东李女士在某平台购买的“全新”打印机频繁报错,维修无果。她查询最新质保发现,整机标注保修三年,系统却显示剩余保修期不足两年,经售后核实确





