近60道MySQL经典面试题
mysql面试常见问题学习整理
2.3.17.18.19.20.44未看。
1.B树和B+树之间的区别是?为什么mysql使用B+树?
一个节点有多个元素;B+树也是排序了的;B+树非叶子节点上的元素都冗余了一份在叶子节点上,B+树叶子节点之间有指针联系起来。(虽然是单向的)
2.
3.
4.2层B+树可以存2万行数据,3层B+树可以存2千万行记录数据。innoDB一页大小是16KB。
5.InnoDB是如何支持范围查找能走索引的?
范围查找,其实也是先找到边界等值,再取后边的值返回。
6.为什么要遵守最左前缀原则才能利用到索引?
主键索引对应的B+树呢是按照主键去对于这8条数据去排序,最终生成的B+树。现在(b,c,d)三个非主键字段构成的联合索引对应的B+树也一样,把8条数据按照b,c,d三个字段进行排序,就可以了。先比较第一个字段,b字段,相同再按照第二个字段进行比较,依次往后推。拿主键去主键索引查找完整的一条数据记录的过程叫做回表。最左前缀原则和where后边的条件的顺序么有关系。只要包含第一个字段就会走索引。
7.范围查找导致索引失效原理分析?
即使符合最左前缀原则,并不一定会走索引,当回表次数过多,效率低于全表扫描,则不会利用走索引的方式,而是采用全表扫描的方式进行查询。
8.索引覆盖的底层原理?
9.索引扫描的底层原理?
10.为什么order by会导致索引失效?
无非就是造成回表次数过多,浪费效率。
11.对字段进行操作导致索引失效原理?
一旦发生了sql隐士数据类型强转转换,需要注意,则破坏了索引结构,无法走索引保证查询OK。select 'a' = 0; true select 'a' = 1; false select '123' = 123; true select 'b' = 1; false 字符串中的数字会进行强转成数字,非数字字符串都是强转成0,再去执行sql。
12.ACID靠什么来保证的?
13.explain语句结果中各个字段分别表示什么?
14.InnoDB是如何实现事务的?
17.18.19.20.
21.mysql慢查询该如何优化?
22.mysql两种索引结构(hash索引和B+树索引结构)的优劣势对比?
23.mysql锁的类型有哪些?
24.MYSQL锁有哪些,该如何理解?
25.mysql执行计划怎么看?
26.mysql主从同步原理?
27.InnoDB是如何实现事务的?
28.mysql什么情况下设置了索引但无法使用?
30.存储拆分后如何解决唯一主键问题?
31.海量数据下如何快速查找一条记录?
32.简单说说MyISAM和InnoDB引擎的区别?
读写分离的时候,第一个适合读;第二个适合写。
33.简述mysql中索引类型及对数据库的性能的影响?
34.mysql的锁有哪些?
35.B树和B+树的区别?为什么mysql使用B+树?
epoll和poll的区别?
二叉搜索树和平衡二叉树有什么关系?
强平衡二叉树和弱平衡二叉树有什么区别?
36.事务的基本特性和隔离级别?
37.如何实现分库分表?
38.什么是MVCC机制?
39.什么是脏读,幻读;不可重复读;怎么解决?
40.索引的基本原理?
41.索引设计原则?
42.索引覆盖是什么?
43.怎么处理系统的慢查询问题?
44.如何进行分库分表?
45.最左前缀原则是什么?
46.Innodb是如何实现事务的?
47.mysql有哪些存储引擎?
48.MyISAM和InnoDB的区别是什么?
49.数据库表设计时,字段是如何进行选择的?
50.MySql中varchar(m)最多能存储多少数据?
51.事务并发可能存在或引入什么问题?
52.简单说下mysql的各种索引?
53.什么是三星索引?
54.InnoDB一棵B+树可以存放多少行数据?
55.如何提高insert的性能?
56.什么是全局锁?共享锁?排它锁?
57.mysql如何实现读写分离?(同视频号44)
什么是读写分离呢?就是将MySQL的数据拷贝成多份,写到其他的MySQL服务器上面,原来MySQL数据库呢,负责写,我们把它称之为主库,其他的MySQL数据库只负责读,称为从库,这就是MySQL的读写分离。具体怎么实现?从一台MySQL服务器数据库开始,开始构建多台,实现读写分离的主从架构。面试当中问的最多的是读写分离的原理,MySQL的读写分离的原理的核心是依赖于一个日志,这个日志呢,叫做binlog,binlog是个文件,是个二进制文件,如果说你对mysql执行任何的数据写入操作,比如insert或者是update的操作的话,它都会去写到这个文件,也就是说如果你执行的是修改的话,它会去写,但是查询不会。当你搭建了读写分离的服务器集群之后,那么在主库里面,他就会启动一个异步线程,这个异步线程会把这个binlog复制到从库上边来, 然后,从库收到这一个数据文件之后,它会去写一个叫做relay log的日志,这个日志叫中继日志,最后呢,从库它会启动一个叫做sql的线程,这个线程呢,就是去执行这个日志里边的insert和update就可以了。这样的话,从库里边的数据就已经同步了,这样就实现了MySQL的读写分离。说一下读写分离的优缺点,它的优点很多,比如,你有了主从架构的话,你不用担心一台mysql宕机,比如主库宕机了,那么这个时候你可以把从库改成主库,继续运行,与此同时的话,如果针对的是读业务,其实主库宕机了,对你的业务是没有任何影响的,另外你使用的是主从架构,你的项目性能会更高,因为你的数据的读和写,你分别在两台不同的数据库上面,所以项目的性能会更高,那么呢,这个就是mysql读写分离的优点,与此呢,还有缺点,缺点就是,mysql读写分离它的一个机制是异步的,就是在非常极端的情况下面,你的mysql主库宕机了,binlog它还没来得及进行复制,他就会导致数据的丢失,所以呢,它会最终造成从库里边数据的不一致(和主库),不过,出现这样的情况概率很低, 基本上呢是可以容忍的。
58.mysql如何实现分库分表?
按hash;按时间。
59.谈一下mysql中的死锁及如何解决死锁问题?
参考网络视频资料学习整理:
面试必刷:60道MySql经典面试必考题
https://www.bilibili.com/video/BV1WU4y1d7hD?p=2