我的祖国冷知识 我的祖国相关知识
7892023-09-09
其实MyISAM和InnoDB的区别的问题并不复杂,但是又很多的朋友都不太了解innodb为什么不建议用外键,因此呢,今天小编就来为大家分享MyISAM和InnoDB的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
本文目录
InnoDB特性
1.支持事务,实现事务的四种隔离级别,CAID特性。
2.是行级锁,并发性能高。
3.支持外键
4.可利用日志进行数据回滚。
5.是聚集索引(聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同),必须有主键,
MyISAM特性1.不支持事务
2.写操作为表级别
3.不支持外键
4.非聚集索引,不一定需要主键
mysql的InnoDB存储引擎支持事务处理,支持外键和并发系统。
InnoDB存储引擎:
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。
支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM和InnoDB是MySQL中两种常用的存储引擎,它们有以下几点不同:
1.事务支持:MyISAM不支持事务,而InnoDB支持事务。
2.锁机制:MyISAM表级锁,InnoDB行级锁。
3.性能:MyISAM执行速度较快,但锁机制复杂,容易出现死锁;InnoDB执行速度较慢,但支持事务和行级锁,并发能力更强。
4.扩展性:MyISAM存储空间较小,不支持索引,不支持插入、更新操作,不支持外键约束;InnoDB存储空间较大,支持索引,支持插入、更新操作,支持外键约束。
5.数据一致性:MyISAM不支持事务,事务中的更新操作不会影响其他事务,因此数据一致性较差;InnoDB支持事务,可以保证数据一致性。
综上所述,MyISAM适合于不需要事务支持的小型数据库,如临时表、日志表等;InnoDB适合于需要事务支持的大型数据库,如网站、OA等系统。
相信很多程序员朋友对数据的索引并不陌生,最常见的索引是B+Tree索引,索引可以加快数据库的检索速度,但是会降低新增、修改、删除操作的速度,一些错误的写法会导致索引失效等等。
但是如果被问到,为什么用了索引之后,查询就会变快?B+Tree索引的原理是什么?这时候很多人可能就不知道了,今天我就以MySQL的InnoDB引擎为例,讲一讲B+Tree索引的原理。
索引的基础知识MySQL的基本存储结构是页,大概就是这个样子的:
在这里,我们需要了解以下几点(非常重要):
当我们用MySQL的InnoDB引擎创建表,有且只能有一个主键;如果我们没有显示地指定之间,那么MySQL会自动生成一个隐含字段作为主键;
聚集索引:以主键创建的索引;聚集索引的叶子节点存储的是表中的数据;
非聚集索引:非主键创建的索引;非聚集索引在叶子节点存储的是主键和索引列;使用非聚集索引查询数据,会查询到叶子上的主键,再根据主键查到数据(这个过程叫做回表)。
页和页之间、页和数据之间的关系我们以聚集索引做讲解,页和页之间、以及页和数据之间的关系是这样的:
数据页和数据页之间,组成一个双向链表;
每个数据页中的记录,是一个单向链表;
每个数据页都根据内部的记录生成一个页目录(Pagedirectory),如果是主键的话,可以在页目录中使用二分法快速定位;
如果我们根据一个非主键、非索引列进行查询,那么需要遍历双向链表,找到所在的页;再遍历页内的单向链表;如果表内数据很大的话,这样的查询就会很慢。
B+Tree索引的原理先让我们看看B+Tree索引大概是什么样子(以聚集/主键索引为例):
假如这时候我们要查询id=16的数据:
查询页-1,找到页-2存储的是小于30的数据;
查询页-2,找到页-5存储的是10~20的数据;
查询页-5,找到id=16的数据。
很显然,没有用索引的时候,需要遍历双向链表来定位对应的页,而有了索引,则可以通过一层层“目录”定位到对应的页上。
为什么B+Tree索引会降低新增、修改、删除的速度B+Tree是一颗平衡树,如果对这颗树新增、修改、删除的话,会破坏它的原有结构;
我们在做数据新增、修改、删除的时候,需要花额外的时间去维护索引;
正因为这些额外的开销,导致索引会降低新增、修改、删除的速度。
思考题,欢迎留言讨论现在你是否理解了B+Tree索引的原理?
最后再留一个思考题:为什么官方建议使用自增长主键作为索引?大家可以在留言中写下你的答案。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取海量学习资料。MyISAM和InnoDB的区别的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于innodb为什么不建议用外键、MyISAM和InnoDB的区别的信息别忘了在本站进行查找哦。