转自:https://blog.csdn.net/qq_39871711/article/details/105356927
1.索引组织
InnoDB 是将索引和数据都存储到了一个文件中ibd类型,MyISAM 存储到了两个文件,MYD存储数据,MYI存储索引。
yISAM 引擎把数据和索引分开了,一人一个文件,这叫做非聚集索引方式;Innodb 引擎把数据和索引放在同一个文件里了,这叫做聚集索引方式。【??聚集和非聚集不是针对是否对主键来说的吗?】
2.Innodb 引擎的底层实现(聚集索引方式)
InnoDB 是聚集索引方式,因此数据和索引都存储在同一个文件里。
首先 InnoDB 会根据主键 ID 作为 KEY 建立索引 B+树,这是建表的时候 InnoDB 就会自动建立好主键 ID 索引树,这也是为什么 Mysql 在建表时要求必须指定主键的原因。
2.1 当我们为表里某个字段加索引时 InnoDB 会怎么建立索引树呢?如user_name ?
那么 InnoDB 就会建立 user_name 索引 B+树,节点里存的是 user_name 这个 KEY,叶子节点存储的数据的是主键 KEY。
拿到主键 KEY 后,InnoDB 才会去主键索引树里根据刚在 user_name 索引树找到的主键 KEY 查找到对应的数据。
2.2 为什么要多此一举?
InnoDB 需要节省存储空间。
一个表里可能有很多个索引,InnoDB 都会给每个加了索引的字段生成索引树,如果每个字段的索引树都存储了具体数据,那么这个表的索引数据文件就变得非常巨大(数据极度冗余了)。
3.MyISAM 引擎的底层实现(非聚集索引方式)
MyISAM 在建表时以主键作为 KEY 来建立主索引 B+树,树的叶子节点存的是对应数据的物理地址。我们拿到这个物理地址后,就可以到 MyISAM 数据文件中直接定位到具体的数据记录了。
3.1 为字段添加索引?
当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点同样是记录了对应数据的物理地址,然后也是拿着这个物理地址去数据文件里定位到具体的数据记录。
4.什么字段适合添加索引?
-
较频繁的作为查询条件的字段应该创建索引;
-
唯一性太差的字段不适合单独创建索引,即使该字段频繁作为查询条件;
-
更新非常频繁的字段不适合创建索引。
标签:MyISAM,索引,InnoDB,KEY,数据,主键 来源: https://www.cnblogs.com/BlueBlueSea/p/15010249.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。