问答分享第二弹 Mysql的搜索引擎 ,看完暴虐面试官!

Posted androidstarjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问答分享第二弹 Mysql的搜索引擎 ,看完暴虐面试官!相关的知识,希望对你有一定的参考价值。

点击上方蓝色“终端研发部”,选择“设为星标”

学最好的别人,做最好的我们 

大家好,我是小于哥哈。前几天能分享了第二期面试题mysql 中搜索引擎的面试考点,这道题是面试常温的面试,看完在数据库引擎方面,我相信你一定会有收获的

首发于公众号【终端研发部】

核心点

1、搜索引擎InnoDB和MyIsam的区别和联系
2、Memory的相关的 知识的补充

目标

1、搜索引擎InnoDB和MyIsam的区别和联系
2、Memory的相关的 知识的补充
3、关于主键和外键的区别和联系
4、应用场景

关于主键和外键的区别和联系:

主键就是一个表的主关键字,能够唯一确定这条记录的。

外键就是参考主表中的某一个字段的值,一般是一个主键记录对应多个外键记录。一般是某一张表的一个外键字段引用另一张表的主键。

首先说一下 为什么MyISAM会比Innodb 的查询速度快。

NNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多;

(1)数据块,INNODB要缓存,MYISAM只缓存索引块, 这中间还有换进换出的减少;

(2)innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快

(3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC ( Multi-Version Concurrency Control )多版本并发控制

InnoDB存储引擎

1、 InnoDB具有事务,回滚,崩溃修复能力和多版本并发的事务安全
2、关于InnoDB的auto_increment列:

InnoDB支持自动增长列,此列不能为空,且值必须唯一
此列必须为主键。插入时,不指定值,默认是自增都的值。指定0或者NULL时,也 是自增后的值。指定合法且不存在的值,则此后的自动从该值开始
3、InnoDB中的Foreign Key:
InnoDB支持外键。外键所在表通常称为子表。所依赖表称为父表。且父表中,被子表关联的字段必须为父表的主键。
(外键:可以简单的理解为:当对父表的数据进行更新,删除,添加时,子表的数据也会随之变化。例子很多,此处不举例)
4、InnoDB的存储引擎及其优缺点:
InnoDB存储引擎的存储格式有三个文件:
.frm表结构文件,此文件存放表创建时的字段定义等信息。
表的数据文件,存放在innodb_data_home_dir目录下,
表的索引文件,存放在innodb_data_file_path目录下
InnoDB存储引擎具有良好的ACID特性。
InnoDB的缺点:读写效率相对MYISAM比较差。占用的磁盘空间比较大。
5、InnoDB的理想使用场合:
高并发,更新操作比较多的表。需要使用事务的表。对自动灾难恢复有要求的表。

3:MYISAM存储引擎:

1、MYISAM存储引擎表的存储有三个文件:

.frm文件,存储表的结构
.myd文件,存储表的数据
.myi文件,存储表的索引

2、MYISAM存储引擎的存储格式

静态型
动态型

缩型:

3、MYISAM存储引擎的优缺点:

优点:占用空间小,处理速度快(相对InnoDB来说)
确定:不支持事务的完整性和并发性

总结

(1).事务处理:

MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等)

(2).锁机制不同:

MyISAM是表锁,InnoDB是行级锁。

(3).增删改查操作:

MyISAM:如果执行大量的查询操作,MyISAM是更好的选择

InnoDB:如果你的数据执行大量的插入/更新,出于性能方面的考虑,应该使用InnoDB表

(4).查询表的行数不用:

MyISAM: 执行select count() from table语句时 MyISAM只需要简单的查询出保存好的行数,当count()语句包含 where条件时,两种表的操作是一样的。

InnoDB: InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

(5).外键

MyISAM不支持外键

mysiam表不支持外键,而InnoDB支持

补充 Memory存储引擎

Memory存储引擎的文件存储形式
Memory存储引擎也会再磁盘上形成一个 .frm的表结构文件,只是表的数据件并不以文件的形式存放在磁盘上。鉴于其数据存放在内存里,因此,访问速度更快。但需 要考虑的是:内存上数据的持久性。

Memory存储引擎的索引类型

默认 哈希索引

支持BTree索引

Memory特点

Memory存储引擎的数据存储周期 数据存放在内存上,一旦服务器关机,数据将不再存在

Memory存储引擎的优缺点:

Memory存储引擎不支持变长表列
MySQL4.1.0之前,不支持auto_increment列

使用场景

1、 MyISAM适合:

(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。

2、InnoDB适合:

(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

3、Memory存储引擎的使用场合

速度要求快的,临时数据
丢失以后,对项目整体没有或者负面影响不大的时候。

BAT等大厂Java面试经验总结 想获取 Java大厂面试题学习资料扫下方二维码回复「BAT」就好了回复 【加群】获取github掘金交流群回复 【电子书】获取2020电子书教程回复 【C】获取全套C语言学习知识手册回复 【Java】获取java相关的视频教程和资料回复 【爬虫】获取SpringCloud相关多的学习资料回复 【Python】即可获得Python基础到进阶的学习教程回复 【idea破解】即可获得intellij idea相关的破解教程关注我gitHub掘金,每天发掘一篇好项目,学习技术不迷路!



回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
为什么HTTPS是安全的
因为BitMap,白白搭进去8台服务器...
《某厂内部SQL大全 》.PDF
字节跳动一面:i++ 是线程安全的吗?
大家好,欢迎加我微信,很高兴认识你!
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

相信自己,没有做不到的,只有想不到的在这里获得的不仅仅是技术!



就给个“在看”

以上是关于问答分享第二弹 Mysql的搜索引擎 ,看完暴虐面试官!的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# ElasticSearch第二弹之分片原理

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

AI·暑期实践人工智能学院暑期社会实践第二弹

数据库学习笔记第二弹——MySQL的登陆与使用(图文详解2022)

数据库学习笔记第二弹——MySQL的登陆与使用(图文详解2022)