1、基本知识
2、关系型数据库和非关系型数据库
3、mysql优化&索引失效
4、MySQL主要提供2种方式的索引:B-Tree索引,Hash索引
5、MyISAM与InnoDB 的区别
6、面试官:MySQL索引为什么用B+树?
答案:
1、基本知识
答:
2、关系型数据库和非关系型数据库
答:一、关系型数据库
主流的有3个,mysql、sqlServer、Oracle
以sql为例,关系型数据库存储结构是二维表结构,类似依据x,y可以定位一个数据;
Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns
关系型数据库 数据库 表 行 列(字段)
基于行式存储,存储结构化数据,一行代表一条完整的信息。
关系型数据库遵循ACID特性(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),支持事务处理能力。
但容量扩展性有限。
数据库的ACID & 3种隔离级别 脏读、不可重复读、幻读
适用场景:
需要事务支持;
基于sql的结构化查询存储,处理复杂的关系。
二、非关系型数据库
即NoSQL数据库(not only sql),一般以简单的key-value模式存储,因此大大增加了数据库的扩展能力,不支持ACID,远超于SQL的性能。
一般用不着sql和用了sql也不行的情况,可以考虑使用Nosql。
适用场景:
对数据高并发的读写(mysql数据库存储在磁盘上,高并发会产生大量IO)
对海量数据的读写(mysql数据库不支持海量数据)
对数据高可扩展性的(例如key-value,redis中支持5种类型的value)
- 缓存型数据库
(1)Redis
存储结构:key -> value(String、list、set、hash(field-value)、zset(score-value))
内存中数据有时间限制,也提供RDB和AOF两种持久化方式。
(2)Memcached
区别是不会持久化,完全基于内存,基本被Redis替代了。
3、mysql优化&索引
答:数据库索引失效的几种情况 https://blog.csdn.net/qq_34820803/article/details/105635720
4、MySQL主要提供2种方式的索引:B-Tree索引,Hash索引
答:B树索引具有范围查找和前缀查找的能力,对于有N节点的B树,检索一条记录的复杂度为O(LogN)。相当于二分查找。
哈希索引只能做等于查找,但是无论多大的Hash表,查找复杂度都是O(1)。
显然,如果值的差异性大,并且以等值查找(=、 <、>、in)为主,Hash索引是更高效的选择,它有O(1)的查找复杂度。
如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。
5、InnoDB和MyISAM的区别是什么?
https://blog.csdn.net/qq_35642036/article/details/82820178
1、InnoDB支持事务,MyISAM不支持;
2、InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有
3、InnoDB支持行级锁,MyISAM只支持表锁;
4、InnoDB支持崩溃后的恢复,MyISAM不支持;
5、InnoDB支持外键,MyISAM不支持;
6、InnoDB不支持全文索引,MyISAM支持全文索引;
6、面试官:MySQL索引为什么用B+树?
https://zhuanlan.zhihu.com/p/69137713
