【备战面试】MySQL基础(二)
创始人
2025-05-28 10:33:57
0

本篇总结的是MySQL知识相关的面试题,后续也会更新其他相关内容

文章目录

  • 1、drop、delete和truncate的区别?
  • 2、UNION和UNION ALL的区别?
  • 3、什么是临时表,什么时候会使用到临时表,什么时候删除临时表?
  • 4、大表数据查询如何进行优化?
  • 5、为什么要设置主键?
  • 6、了解慢查询日志吗?统计过慢查询吗?对慢查询如何优化?
  • 7、主键一般用自增ID还是UUID?
  • 8、字段为什么要设置成NOT NULL?
  • 9、MySQL的binlog有有几种录入格式?分别有什么区别?


1、drop、delete和truncate的区别?

答:区别如下:
在这里插入图片描述

一般来讲:

  • 删除整个表,使用drop;
  • 删除表的部分数据使用delete;
  • 保留表结构删除表的全部数据使用truncate;

2、UNION和UNION ALL的区别?

答:unionunion all的作用都是将两个结果集合并到一起。

  • union会对结果去重并排序
  • union all直接直接返回合并后的结果,不去重也不进行排序
  • union all性能union性能好;

3、什么是临时表,什么时候会使用到临时表,什么时候删除临时表?

答:MySQL在执行SQL语句的时候会临时创建一些存储中间结果集的表,这种表被称为临时表,临时表只对当前连接可见,在连接关闭后,临时表会被删除并释放空间

临时表主要分为内存临时表和磁盘临时表两种:

  • 内存临时表使用的是MEMORY存储引擎
  • 磁盘临时表使用的是MyISAM存储引擎

一般在以下几种情况中会使用到临时表:

  • FROM中的子查询
  • DISTINCT查询并加上ORDER BY
  • ORDER BYGROUP BY子句不一样时会产生临时表
  • UNION查询会产生临时表

4、大表数据查询如何进行优化?

答:

  • 索引优化
  • SQL语句优化
  • 水平拆分
  • 垂直拆分
  • 建立中间表
  • 使用缓存技术
  • 固定长度的表访问起来更快
  • 越小的列访问越快

5、为什么要设置主键?

答:主键是唯一区分表中每一行的唯一标识,如果没有主键,更新或者删除表中特定的行会很困难,因为不能唯一准确地标识某一行。

6、了解慢查询日志吗?统计过慢查询吗?对慢查询如何优化?

答:慢查询日志一般用于记录执行时间超过某个临界值的SQL语句的日志

相关参数

  • slow_query_log:是否开启慢查询日志,1表示开启,0表示关闭。
  • slow_query_log_file:MySQL数据库慢查询日志存储路径
  • long_query_time慢查询阈值,当SQL语句查询时间大于阈值,会被记录在日志上。
  • log_queries_not_using_indexes未使用索引的查询会被记录到慢查询日志中。
  • log_output日志存储方式“FILE”表示将日志存入文件“TABLE”表示将日志存入数据库

如何对慢查询进行优化?

  1. 分析语句的执行计划,查看SQL语句的索引是否命中
  2. 优化数据库的结构,将字段很多的表分解成多个表,或者考虑建立中间表。
  3. 优化LIMIT分页

7、主键一般用自增ID还是UUID?

答:我们先来看一下自增ID与UUID的区别:

自增ID:在设计表时将id字段的值设置为自增的形式。

使用自增ID的好处

  • 字段长度较uuid会很多。
  • 数据库自动编号,按顺序存放利于检索
  • 无需担心主键重复问题。

使用自增ID的缺点

  • 因为是自增,在某些业务场景下,容易被其他人查到业务量
  • 发生数据迁移时,或者表合并时会非常麻烦
  • 高并发的场景下,竞争自增锁降低数据库的吞吐能力

UUID:通用唯一标识码,UUID是基于当前时间、计数器和硬件标识等数据计算生成的。

使用UUID的优点

  • 唯一标识,不会考虑重复问题,在数据拆分、合并时也能达到全局的唯一性
  • 可以在应用层生成提高数据库的吞吐能力
  • 需担心业务量泄露的问题。

使用UUID的缺点

  • 因为UUID是随机生成的,所以会发生随机IO影响插入速度,并且会造成硬盘的使用率较低
  • UUID占用空间较大,建立的索引越多,造成的影响越大。
  • UUID之间比较大小较自增ID慢不少,影响查询速度

最后说下结论:

  • 一般情况MySQL推荐使用自增ID。因为在MySQL的InnoDB存储引擎中,主键索引是一种聚簇索引,主键索引的B+树的叶子节点按照顺序存储了主键值及数据,如果主键索引是自增ID,只需要按顺序往后排列即可,如果是UUID,ID是随机生成的,在数据插入时会造成大量的数据移动产生大量的内存碎片,造成插入性能的下降

8、字段为什么要设置成NOT NULL?

答:首先说一点,NULL和空值是不一样的,空值是不占用空间的,而NULL是占用空间的,所以字段设为NOT NULL后仍然可以插入空值

字段设置成NOT NULL主要有以下几点原因:

  • NULL值影响一些函数的统计,如COUNT,遇到NULL值,这条记录不会统计在内
  • B树不存储NULL,所以索引用不到NULL,会造成第一点中说的统计不到的问题。
  • NOT IN查询在有NULL值的情况下返回的结果都是空值
  • MySQL在进行比较的时候NULL会参与字段的比较,因为NULL是一种比较特殊的数据类型,数据
    库在处理时需要进行特殊处理增加了数据库处理记录的复杂性

9、MySQL的binlog有有几种录入格式?分别有什么区别?

有三种格式,statementrowmixed

  • statement级别下,每一条会修改数据的sql都会记录在binlog中。
    • 需要记录每一行的变化减少了binlog日志量,节约了IO,提高性能
    • 由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息
    • 还有一些使用了函数之类的语句无法被记录复制
  • row级别下,不记录sql语句上下文相关信息,仅保存哪条记录被修改
    • 记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作会导致大量行的改动(比如altertable)。
    • 因此这种模式的文件保存的信息太多,日志量太大。
  • mixed级别,一种折中的方案,普通操作使用statement记录,当无法使用statement的时候使用row。

此外,新版的MySQL中对row级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。

相关内容

热门资讯

吕文君社媒庆祝夺冠:不只是海港... 2025赛季中超联赛于昨日正式落幕,上海海港队凭借出色的表现,成功捧起了冠军奖杯,成为了中超历史上又...
日本政府顾问:无需等到160关... 日本政府顾问表示,高市早苗政府对日元干预将采取更积极姿态,以抑制日元疲软带来的通胀压力,干预门槛可能...
被摄影师起诉侵权 视觉中国公开... 来源:每日经济新闻 持续两年多的摄影师起诉视觉中国(000681.SZ)侵权一案近日迎来进展。 法...
《哪吒2》被质疑过多使用动捕技... 搜狐娱乐讯 22日,奥斯卡公开的最佳动画长片奖“符合参评资格”大名单中没有《哪吒之魔童闹海》,引发热...
为了少付合同款,湖南一公司诉讼... 华声在线11月23日讯(文/视频 全媒体记者 杨昱 通讯员 胡云淞)为了少支付40万元合同款及利息,...
原创 退... 在机关事业单位养老保险制度从2014年10月1日开始实施之后,标志着我国退休的制度的并轨。之所以会称...
从“纸上政策”到“落地实效” ... 在建湖县高新技术园区,文辰精密科技有限公司的生产车间内机器轰鸣,工人们正忙着赶制新一批订单。这家专注...
跨省办公更便捷!京津冀律师驿站... 11月22日至23日,京津冀律师驿站在北京启动“百千万行动计划”,计划通过建立百家律所联系点,推动千...
梅花生物:因侵害专利权被味之素... 北京商报讯(记者 郭秀娟 王悦彤) 11月23日,北京商报记者获悉,近日梅花生物发布公告称,公司及全...
吉林益豆食品有限公司:依托互市... 珲春地处中、俄、朝三国交界,得天独厚的地理位置,使其成为连接东北亚的“黄金通道”。在这里,吉林益豆食...