sql面试题

这个时节,大家都在忙着找工作,我们就来总结一下MySQL DBA相关的技术面试题。

01

问题1:你之前处理过MySQL的哪些案例?

解答思路:说到案例,逃离不了MySQL的五大知识模块:体系结构、数据的备份恢复、复制、高可用集群架构和优化。我们可以从这五个方向着手考虑,比如:

①MySQL版本的升级;②处理集群架构中的各种“坑”和问题(你遇到过的就可以);③根据公司业务类型,合理设计MySQL库、表和后期架构;④定期进行灾备恢复演练;⑤恢复误删除的数据信息。

02

问题2:什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控?

解答思路:死锁是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象。当多个事务以不同顺序试图加锁同一资源时,就会产生死锁。

锁等待:MySQL数据库中,不同session在更新同行数据时,会出现锁等待的现象。重要的三张锁的监控表:innodb_trx、innodb_locks和innodb_lock_waits。

03

问题3:MySQL主从复制的具体原理是什么?

解答思路:直接阐述原理即可,表达一定要清楚。

主服务器把数据更新记录到二进制日志中,从服务器通过I/O thread向主库发起binlog请求,主服务器通过I/O dump thread把二进制日志传递给从库,从库通过I/O thread记录到自己的中继日志中。然后再通过SQL thread应用中继日志中SQL的内容。

04

问题4:MySQL有哪些索引类型?

解答思路:可以从三个角度去谈。

首先从数据结构角度上可以分为B+tree索引、hash索引、fulltext索引(InnoDB、MyISAM都支持)。其次从存储角度上可以分为聚集索引和非聚集索引。最后逻辑角度上可以分为primary key、normal key、单列、复合和覆盖索引。

05

问题5:服务器负载过高或者网页打开缓慢,简单说说你的优化思路?

解答思路:我们可以通过前面讲过的优化思路中的四维度模型去阐述。

首先要发现问题的过程,通过操作系统、数据库、程序设计、硬件角度四个维度找到问题所在。先找到瓶颈点的位置,制定好优化方案,形成处理问题的体系模型。体系制定好之后,在测试环境进行优化方案的测试。测试环境下如果优化效果很好,再实施到生产环境上。最后做好处理问题的记录。好记性不如烂笔头,多做总结,方可大步前进。

06

问题6:如何优化一条慢SQL语句?

解答思路:针对SQL语句的优化,我们不要一上来就回答添加索引,这样显得太不专业。我们可以从如下几个角度去分析:

①回归到表的设计层面,数据类型选择是否合理。

②大表碎片的整理是否完善。

③表的统计信息是不是准确的。

④审查表的执行计划,判断字段上面有没有合适的索引。

⑤针对索引的选择性,建立合适的索引(就又涉及大表DDL的操作问题。所以说,我们要有能力把各个知识点联系起来)

07

问题7:为什么要为InnoDB表设置自增列做主键?

解答思路:使用自增列做主键,写入顺序是自增的,和B+数叶子节点分裂顺序一致。InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致时,存取效率是最高的。

posted @ 2019-03-07 16:15  吧啦吧啦吧啦  阅读(115)  评论(0编辑  收藏  举报