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+树索引的叶子节点顺序一致时,存取效率是最高的。