大数据&云计算MySQL性能优化做得好的人,都懂的索引绝技( 四 )
第二 , B+树的叶子节点是数据阶段用了一个链表串联起来 , 便于范围查找 。
本文插图
通过 B 树和 B+树的对比我们看出 , B+树节点存储的是索引 , 在单个节点存储容量有限的情况下 , 单节点也能存储大量索引 , 使得整个 B+树高度降低 , 减少了磁盘 IO 。 其次 , B+树的叶子节点是真正数据存储的地方 , 叶子节点用了链表连接起来 , 这个链表本身就是有序的 , 在数据范围查找时 , 更具备效率 。 因此 Mysql 的索引用的就是 B+树 , B+树在查找效率、范围查找中都有着非常不错的性能 。
二、InnoDB引擎和MyISAM引擎的实现
MySQL底层数据引擎以插件形式设计 , 最常见的是 InnoDB 引擎和 MyISAM 引擎 , 用户可以根据个人需求选择不同的引擎作为 MySQL 数据表的底层引擎 。 我们刚分析了 , B+树作为 MySQL 的索引的数据结构非常合适 , 但是数据和索引到底怎么组织起来也是需要一番设计 , 设计理念的不同也导致了 InnoDB 和 MyISAM 的出现 , 各自呈现独特的性能 。
MyISAM 虽然数据查找性能极佳 , 但是不支持事务处理 。 InnoDB 最大的特色就是支持了 ACID 兼容的事务功能 , 而且他支持行级锁 。 MySQL 建立表的时候就可以指定引擎 , 比如下面的例子 , 就是分别指定了 MyISAM 和 InnoDB作为 user 表和 user2 表的数据引擎 。
本文插图
本文插图
执行这两个指令后 , 系统出现了以下的文件 , 说明这两个引擎数据和索引的组织方式是不一样的 。
本文插图
InnoDB 创建表后生成的文件有:
- frm:创建表的语句;
- idb:表里面的数据+索引文件 。
- frm:创建表的语句;
- MYD:表里面的数据文件(myisam data);
- MYI:表里面的索引文件(myisam index) 。
1、MyISAM引擎的底层实现
MyISAM 用的是非聚集索引方式 , 即数据和索引落在不同的两个文件上 。 MyISAM 在建表时以主键作为 KEY 来建立主索引 B+树 , 树的叶子节点存的是对应数据的物理地址 。 我们拿到这个物理地址后 , 就可以到 MyISAM 数据文件中直接定位到具体的数据记录了 。
当我们为某个字段添加索引时 , 我们同样会生成对应字段的索引树 , 该字段的索引树的叶子节点同样是记录了对应数据的物理地址 , 然后也是拿着这个物理地址去数据文件里定位到具体的数据记录 。
本文插图
2、Innodb引擎的底层实现
InnoDB 是聚集索引方式 , 因此数据和索引都存储在同一个文件里 。 首先 InnoDB 会根据主键 ID 作为 KEY 建立索引 B+树 , 如左下图所示 , 而 B+树的叶子节点存储的是主键 ID 对应的数据 , 比如在执行 select * from user_info where id=15 这个语句时 , InnoDB 就会查询这颗主键 ID 索引 B+树 , 找到对应的 user_name="Bob" 。
推荐阅读
- 金十数据|中国7月制造业交亮眼成绩单!上半年美国对华投资增长6%,好消息
- 金十数据|苹果欲向印转移6条生产线,印度手机市场混战:三星份额紧追小米
- 餐厅|大数据显示:二季度餐厅服务员求职环比上升超150%,快递员收入第一
- 美剧去哪看|状元们最后都干什么?权势巨子数据显示,3300名状元,最后只是……
- "飒"英雄!20岁女兵征服40吨远火车 巾帼不让秀媚
- 零售店|194年历史!美国最古老奢侈品百货店Lord&Taylor申请破产保护
- 中国天气网|哪些台风与“黑格比”相似,大数据看8月台风
- 新闻科技快报 华云数据用创新技术夯实中国信创“云基座”
- 问董秘|因为公司的发动机产品满足国六标准...,投资者提问:在公司营销数据和半年报中发现
- 天擎|海纳百川 风云际会——气象大数据云平台“天擎”
