【每日一题】MySQL索引理解、引擎及区别、Redis和MySQL的区别及持久化机制(搜狗金融)
今天带来的是搜狗金融面试题:MySQL的索引如何理解?常用引擎是什么?有什么区别?比较Redis和MySQL的区别?说一下各自的持久化机制。
问题分析
考察对数据库的深入理解,把问题的每个部分拆解开回答即可。
核心问题回答
Q1. MySQL索引的理解
索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。Mysql索引主要有两种结构:B+Tree索引和Hash索引。
索引虽然能非常高效的提高查询速度,同时却会降低更新表的速度。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。所以要看实际情况是否建立索引。
Q2. 常用引擎是什么及区别
a.常用引擎有三种:InnoBD,Myisam,Memory。
b.常用引擎的区别:
InnoDB:支持事务,支持外键,支持行锁,写入数据时操作快。
Myisam:不支持事务。不支持外键,支持表锁,支持全文索引,读取数据快。
Memory:所有的数据都保留在内存中,不需要进行磁盘的IO所以读取的速度很快,一旦关机的话表的结构会保留,但是数据会丢失,表支持Hash索引,因此查找速度很快。
Q3. Redis和MySQL的区别及各自持久化机制
a. MySQL和Redis的数据库类型
MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
b. MySQL的运行机制
MySQL作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
c. 缓存
缓存就是数据交换的缓冲区(Cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快。
d. Redis数据库
Redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。
e. Redis和MySQL的区别总结:
类型上
从类型上来说,MySQL是关系型数据库,Redis是缓存数据库
作用上
MySQL用于持久化的存储数据到硬盘,功能强大,但是速度较慢
Redis用于存储使用较为频繁的数据到缓存中,读取速度快
需求上
MySQL和Redis因为需求的不同,一般都是配合使用。
Redis和MySQL各自的持久化机制:
Redis的持久化机制:
Redis提供两种持久化方式,RDB和AOF;AOF可以完整的记录整个数据库,在AOF模式下,Redis会把执行过的每一条更新命令记录录下来,保存到AOF文件中;而RDB记录的只是数据库某一时刻的快照。
两种区别是一个是持续的用日志记录写操作,Crash后利用日志恢复;一个是平时写操作的时候不触发写,只有手动提交save命令,或关闭命令的时候,才触发备份操作。
MySQL的持久化机制:
InnoDB引擎会引入redo日志作为中间层来保证MySQL的持久化,当有一条记录更新的时候,InnoDB引擎就会先把记录写到redolog中,并更新内存。同时InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面。
问题扩展
MySQL索引存在的好处,以及和Redis各自适用的场景。
综合项目中使用
几种数据库的特性要理解清楚,这样对项目选型会有更深刻的了解。
推荐阅读: