MySQL面试常见题目(三)

原文地址:MySQL面试常见题目(三)

1、MySQL主从延迟如何解决?

MySQL主从原理图如下:

主从同步出现延迟原因:一个服务器开发N个链接给客户端,可能会产生大并发更新操作,但从服务器里读取binlog的线程只有一个,当某SQL在从服务器上执行时间稍长或由于某SQL需锁表,就会导致主服务器的SQL大量积压,未被同步到从服务器。

解决方案如下:

  1. 主服务器要负责更新,安全性要求比从服务器高,所以有些参数可修改,如sync_binlog=1,innodb_flush_log_at_trx_commit=1等。

  2. 选择更好的硬件设备作为salve。

  3. 将其中一台服务器单独作为备份使用,不提供查询,负载下来之后,relay log的SQL执行效率自然就提高了。

  4. 增加从服务器,目的还是分散读压力,降低服务器负载。

2、数据库连接池是什么?为什么需要数据库连接池?

连接池原理:在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回的方法。

应用程序和数据库建立连接过程如下:

  1. 通过TCP的三次握手和数据库服务器建立连接。

  2. 发送数据库用户账号密码,等待数据库验证用户身份。

  3. 完成身份验证后可提交SQL到数据库执行。

  4. 关闭连接,TCP四次挥手告别。

数据库连接池的好处:

  1. 资源重用(连接重用)。

  2. 获得更快的系统响应速度。

  3. 新的资源分配手段,统一的连接管理,避免数据库连接泄露。

3、SQL在MySQL中的执行过程?

先看下MySQL的逻辑架构图:

查询过程如下:

  1. 检查该SQL是否有执行权限。

  2. 如无权限,则直接返回错误信息。

  3. 如有权限,在MySQL8.0之前会先查询缓存。

  4. 如无缓存,分析器进行词法分析,提取SQL的select等关键元素,之后判断SQL是否有语法错误,如关键词是否正确等。

  5. 优化器进行确认执行方案。

  6. 进行权限校验,如无权限,则直接返回错误信息,如有权限,则调用数据库引擎接口,返回执行结果。

4、InnoDb的索引策略?

  1. 覆盖索引。

  2. 最左前缀原则。

  3. 索引下推。

  4. 索引下推优化是MySQL5.6引入,可在索引遍历过程中对索引包含的字段先做判断,直接过滤不满足条件的记录,减少回表次数。

5、数据库存储日期格式时,如何考虑时区转换问题?

  1. datetime适合记录数据的原始创建时间,修改记录中其它字段的值,datetime字段的值不会改变,除非手动修改它。

  2. timestamp适合记录数据的最后修改时间,修改记录中其它字段的值,timestamp字段的值都会被自动更新。

6、SQL执行时间过长,可从哪些方面优化?

  1. 查看是否涉及多表和子查询,优化SQL结构,如去除冗余字段,是否可拆表等。

  2. 优化索引结构,看是否可以适当添加索引。

  3. 数据量大的表可考虑进行分表。

  4. 数据库主从分离、读写分离。

  5. explain分析SQL,查看执行计划来优化SQL。

  6. 查看MySQL日志分析是否有其它方面的问题。

7、MySQL数据库服务器性能分析指令。

show status,一些重要字段如下:

  1. Bytes_received和Bytes_sent 和服务器之间来往的流量。

  2. Com_*服务器正在执行的命令。

  3. Created_*在查询执行期限间创建的临时表和文件。

  4. Handler_*存储引擎操作。

  5. Select_*不同类型的联接执行计划。

  6. Sort_*几种排序信息。

show profiles:MySQL分析当前会话SQL执行的资源消耗情况。

8、blob和text区别?

  1. blob存储二进制数据,text存储大字符串。

  2. blob值为二进制字符串,也叫作字节字符串,没有字符集,且排序和比较基于字节的数值。

  3. text为非二进制字符串,也叫作字符字符串,有一个字符集,且根据字符集的排序规则对字段中的值进行排序和比较。

9、MySQL存储货币使用什么字段类型?

  1. decimal和numric,这两种类型被MySQL实现为同一种数据类型,常用于存储与金钱相关的数据。

  2. salary decimal(9,2), 9(precision)代表将被用于存储值的字段的小数点位数,2(scale)代表小数点的位数,存储在salary的范围是-9999999.99~9999999.99。

  3. decimal和numric作为字符串存储,而不是作为二进制浮点数,以便保证精度。

至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

以上均为个人认知,如有侵权,请联系删除。

 

Guess you like

Origin blog.csdn.net/luyaran/article/details/121164827