MyISAM和InnoDB的区别(myisam和innodb的区别面试)

匿名- 2023-08-21 15:40:13

MyISAM和InnoDB的区别

其实MyISAM和InnoDB的区别的问题并不复杂,但是又很多的朋友都不太了解innodb为什么不建议用外键,因此呢,今天小编就来为大家分享MyISAM和InnoDB的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

  1. Mysql中MyISAM和InnoDB的区别有哪些
  2. mysql什么存储引擎支持事务处理,支持外键和并发系统
  3. MyISAM和InnoDB的区别
  4. 数据库中的索引,原理是什么为什么查询使用索引就会快

Mysql中MyISAM和InnoDB的区别有哪些

InnoDB特性

1.支持事务,实现事务的四种隔离级别,CAID特性。

2.是行级锁,并发性能高。

3.支持外键

4.可利用日志进行数据回滚。

5.是聚集索引(聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同),必须有主键,

MyISAM特性

1.不支持事务

2.写操作为表级别

3.不支持外键

4.非聚集索引,不一定需要主键

mysql什么存储引擎支持事务处理,支持外键和并发系统

mysql的InnoDB存储引擎支持事务处理,支持外键和并发系统。

InnoDB存储引擎:

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。

支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM和InnoDB的区别

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的区别的信息别忘了在本站进行查找哦。

MyISAM和InnoDB区别
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688897.com/12/119488.html
上一篇:lol手游单排打什么位置好
下一篇:etc被限制后不收高速公路上能正常使用吗
相关文章
返回顶部小火箭