网站首页 > 基础教程 正文
什么是存储引擎(Save Engines)?
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
存储引擎是数据库的核心,对于MySQL来说,存储引擎是以插件的形式运行的。虽然MySQL支持种类繁多的存储引擎,但是常用的就那么几种。这篇文章主要是对其进行一个总结和对比。
MySQL最常用的两种存储引擎:InnoDB和MyISAM
InnoDB和MyISAM存储引警对比
相同点:都是B+索引
功能不同点:
InnoDB中的索引
Innodb结构为聚簇索引,索引和数据文件放在一个文件
包含2种索: 主键索引 (聚集索引) 、辅助索引 (非聚集索引) 。
主键索引:每个表只有一个主键索引,b+树结构,叶子节点同时保存了主键的值也数据记录,其他节点只存储主键的值。
辅助索引:每个表可以有多个,b+树结构,叶子节点保存了索引字段的值以及主键的值,其他节点只存储索引指端的值。
MyISAM引擎中的索引
B+树结构,MyISM使用的是非聚簇索引
索引文件与数据文件都是单独的一个文件
如下图:为了更形象说明这两种索引的区别,我们假想一个表存储了4行数据,其中Id作为主索引,Name作为辅助索引,图中清断的显示了聚族索引和非聚族索引的差异。
我们看一下上图中数据检索过程
InnoDB数据检索过程
如果需要查询id=14的数据,只需要在左边的主键索引中检索就可以了。
如果需要搜索name='Ellison”的数据,需要2步:
1.先在辅助索引中检索到name=’Ellison”的数据,获取id为14
2.再到主键索引中检索id为14的记录
辅助索引这个查询过程在mysql中叫做回表。
MyISAM数据检索过程
1.在索引中找到对应的关键字,获取关键字对应的记录的地址
2.通过记录的地址查找到对应的数据记录
我们用的最多的是innodb存储引擎,所以此处主要说一下innodb索引的情况,innodb中最好是采用主键查询,这样只需要一次索引,如果使用辅助索引检索,涉及到回表操作,比主键查询要耗时一些。
innodb中辅助索引为什么不像myisam那样存储记录的地址?
表中的数据发生变更的时候,会影响其他记录地址的变化,如果辅助索引中记录数据的地址,此时会受影响,而主键的值一般是很少更新的,当页中的记录发生地址变更的时候,对辅助索引是没有影响的。
--END--
欢迎关注【辉哥传书vlog】头条号,喜欢记得点赞、收藏、评论、转发哦!
猜你喜欢
- 2024-10-12 数据库笔试面试25——有关InnoDB和MyISAM的说法中
- 2024-10-12 Mysql中的InnoDB和MyISAM|每天一面试题
- 2024-10-12 数据库常见面试题:InnoDB和MySIAM的区别-开课吧
- 2024-10-12 记一次生产数据库MyISAM存储引擎转为Innodb过程
- 2024-10-12 InnoDB 和 MyISAM的数据分布是什么样的?
- 2024-10-12 程序员冷知识,Mysql的数据库引擎为什么多选InnoDB?
- 2024-10-12 MySQL之MyISAM索引和InnoDB索引的实现细节
- 2024-10-12 MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?
- 2024-10-12 MyISAM 与 InnoDB 索引的区别有哪些?
- 2024-10-12 mysql-innodb和myisam存储引擎 mysql的两种存储引擎区别,各自的使用场景
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)