2025年MySQL考试常见知识盲点试题及答案_第1页
2025年MySQL考试常见知识盲点试题及答案_第2页
2025年MySQL考试常见知识盲点试题及答案_第3页
2025年MySQL考试常见知识盲点试题及答案_第4页
2025年MySQL考试常见知识盲点试题及答案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年MySQL考试常见知识盲点试题及答案一、单项选择题(共15题,每题只有1个正确答案)1.假设表`t`存在字段`avarchar(10)`,表中存储的`a`字段值为`'123'`、`'123a'`、`'456'`、`'abc'`,执行SQL`SELECT*FROMtWHEREa=123`,返回的结果行数为?A.1行B.2行C.3行D.语法报错答案:B解析:MySQL发生隐式转换时,字符串转数字会从左到右匹配数字字符,直到遇到非数字字符停止。`'123'`转换为数字123,`'123a'`转换为数字123,`'456'`转换为456,`'abc'`转换为0,因此会匹配到前两行。此为开发高频踩坑点,隐式转换会导致索引失效、查询结果不符合预期。2.MySQL8.0中,InnoDB的undo表空间自动truncate的触发条件是?A.undo日志占用占比超过`innodb_undo_log_truncate_threshold`参数值即可触发B.undo表空间大小超过`innodb_max_undo_log_size`,且该空间内的undo页没有任何活跃事务引用C.只要不存在长事务就会自动触发D.需要手动执行`OPTIMIZETABLE`命令触发答案:B解析:开启`innodb_undo_log_truncate`参数后,undo表空间自动清理需要同时满足两个条件:一是表空间大小超过`innodb_max_undo_log_size`(默认1G),二是该空间内所有undo日志对应的事务都已提交,没有活跃事务持有引用,否则会导致事务回滚失败。3.表`t`建立联合索引`idx(a,b,c)`,所有字段均为int类型且非NULL,以下SQL无法利用到联合索引全部三列的是?A.`SELECT*FROMtWHEREa>5ANDb=3ANDc=4`B.`SELECT*FROMtWHEREa=5ANDb>3ANDc=4`C.`SELECT*FROMtWHEREa=5ANDb=3ANDc>4`D.`SELECT*FROMtWHEREb=5ANDc=3ANDa=4`答案:A解析:联合索引最左前缀规则中,范围查询后的列无法用到索引,A选项中`a`是范围查询,后续的`b`、`c`均无法匹配索引。D选项中查询条件列顺序与索引顺序不同,但MySQL优化器会自动调整条件顺序,因此可以用到全部三列索引;B、C选项中范围查询在`b`、`c`列,范围列之前的等值列可以全部匹配索引。4.MySQL默认的RR(可重复读)隔离级别下,以下哪个场景不会触发间隙锁?A.用唯一索引等值查询命中存在的行B.用唯一索引等值查询命中不存在的行C.用普通索引等值查询命中存在的行D.用普通索引执行范围查询答案:A解析:RR隔离级别下,唯一索引的等值查询命中已存在的记录时,只会加行级写锁,不会加间隙锁;其余场景均会加Next-KeyLock(间隙锁+行锁),避免幻读。很多考生误以为RR级别下所有查询都会加间隙锁,此为核心盲点。5.GTID复制模式下,以下操作允许执行的是?A.同一事务中同时更新InnoDB事务表和MyISAM非事务表B.执行`CREATETABLE...SELECT`语句C.在活跃事务中执行`CREATETEMPORARYTABLE`语句D.对带有唯一键的InnoDB表执行`REPLACEINTO`语句答案:D解析:GTID模式有三个核心限制:一是同一事务不能同时操作事务和非事务表,否则会导致单个事务分配多个GTID,主从不一致;二是禁止`CREATETABLE...SELECT`,该语句会拆分为建表、插入两个事务,语句级复制下会出现主键冲突;三是禁止在事务内创建/删除临时表,临时表操作会生成独立GTID,事务提交时会出现异常。`REPLACEINTO`属于正常DML操作,GTID模式下允许执行。6.关于MySQL的`int(10)`和`int(11)`,以下说法正确的是?A.`int(10)`的存储范围比`int(11)`小B.两者存储长度相同,括号内的数字为显示宽度,仅在设置`zerofill`时生效C.`int(10)`占4字节,`int(11)`占5字节D.两者没有任何区别答案:B解析:int类型固定占用4字节,存储范围为-2^31到2^31-1,括号内的数字为显示宽度,仅当字段设置`zerofill`属性时,不足宽度的数值会用0填充,否则无实际意义,很多考生会混淆显示宽度和存储长度。7.MySQL中慢查询日志的`log_queries_not_using_indexes`参数开启后,以下说法正确的是?A.所有未使用索引的查询都会被记录到慢查询日志,无论执行时长是否超过`long_query_time`B.未使用索引的查询只有执行时长超过`long_query_time`才会被记录C.开启该参数后不会产生额外性能损耗D.该参数仅对SELECT语句生效,对UPDATE、DELETE语句不生效答案:A解析:`log_queries_not_using_indexes`开启后,所有未使用索引的SQL(包括DML语句)都会被记录到慢查询日志,无需满足`long_query_time`阈值,通常配合`log_throttle_queries_not_using_indexes`参数使用,限制每分钟记录的未用索引SQL数量,避免日志暴涨。8.以下哪个场景不会触发MDL(元数据锁)等待?A.长事务持有某表的MDL读锁,后续执行该表的ALTERTABLE操作B.执行SELECT查询的同时执行该表的RENAME操作C.两个事务同时对同一张表执行UPDATE操作D.执行`TRUNCATETABLE`操作时,有活跃事务正在查询该表答案:C解析:MDL锁是表级锁,访问表时自动获取,读锁之间共享,读写、写写之间互斥。两个事务同时执行UPDATE操作,获取的是行级写锁,不会触发MDL锁冲突;其余场景均会出现MDL锁等待,严重时会导致整个表的所有读写请求阻塞。9.InnoDB表的自增主键达到类型最大值后,以下说法正确的是?A.删除历史数据后,自增计数器会自动回退,可继续插入数据B.重启数据库后,自增计数器会重置为0,可继续插入数据C.无论是否删除历史数据、是否重启,插入数据都会报`outofrange`错误D.可通过`ALTERTABLEAUTO_INCREMENT=1`重置计数器,无需重建表答案:C解析:InnoDB自增主键计数器运行时存储在内存中,重启后会取表中最大ID+1作为新的计数器值,但若自增主键已经达到类型最大值,即便删除历史数据,计数器也不会回退,插入数据会直接报错,只能通过修改字段类型为`bigint`解决。10.关于MySQL的utf8和utf8mb4字符集,以下说法正确的是?A.utf8是完整的UTF-8编码,支持所有Unicode字符B.utf8mb4是utf8的子集,仅支持4字节以下的字符C.utf8最多存储3字节字符,无法存储emoji表情等4字节Unicode字符D.两者存储效率完全一致,没有区别答案:C解析:MySQL中的utf8是utf8mb3的别名,最多存储3字节的Unicode字符,无法存储emoji、生僻汉字等4字节字符;utf8mb4是完整的UTF-8编码,支持所有Unicode字符,是MySQL8.0的默认字符集。二、多项选择题(共8题,每题有2个及以上正确答案)1.关于MySQL8.0的隐藏索引,以下说法正确的有?A.隐藏索引不会被查询优化器选择,除非设置`optimizer_switch='use_invisible_indexes=on'`B.主键索引可以被设置为隐藏索引C.隐藏索引在数据写入时仍然会更新,不会降低写入性能D.隐藏索引可用于验证删除索引的影响,避免直接删除索引后无法快速恢复答案:ACD解析:主键索引是表的必备索引,不允许被设置为隐藏;其余选项表述均正确,隐藏索引是8.0的核心新特性,常用于索引优化的灰度验证。2.关于binlog的三种格式(statement、row、mixed),以下说法正确的有?A.statement格式记录原始SQL语句,日志量小,但可能出现主从不一致B.row格式记录每行数据的变更详情,日志量大,但不会出现主从不一致C.mixed格式会自动判断SQL安全性,可能导致主从不一致的语句用row格式记录,其余用statement格式D.MySQL8.0默认的binlog格式为statement答案:ABC解析:MySQL8.0默认binlog格式为row,D选项错误;其余选项均表述正确,row格式是生产环境的推荐配置,可避免绝大多数主从不一致问题。3.关于count(*)、count(1)、count(主键)、count(普通字段)的执行效率,以下说法正确的有?A.count(*)和count(1)的执行效率几乎一致,MySQL5.7之后无性能差异B.count(主键)的效率高于count(*),因为只需要读取主键字段C.普通字段允许为NULL时,count(普通字段)的效率最低D.统计总行数时,count(*)是SQL标准定义的写法,优先推荐使用答案:ACD解析:count(*)不会提取字段值,直接按行计数,优化器会选择最小的可用索引扫描,效率最高;count(主键)需要读取主键字段并判断非NULL,效率略低于count(*),B选项错误。4.RR隔离级别下,关于MVCC的实现,以下说法正确的有?A.MVCC通过undo日志和ReadView实现,只在快照读时生效B.快照读指普通的SELECT语句,当前读指SELECT...FORUPDATE、UPDATE、DELETE等语句C.MVCC完全解决了RR隔离级别下的幻读问题D.每个事务的ReadView生成时机不同,RC隔离级别下每次查询都会生成新的ReadView,RR隔离级别下事务启动后第一次查询生成ReadView答案:ABD解析:MVCC仅解决了快照读的幻读问题,当前读的幻读需要通过间隙锁避免,因此RR隔离级别并没有完全解决幻读问题,C选项错误。三、判断题(共10题,正确打√,错误打×)1.MyISAM表的count(*)执行速度永远比InnoDB快。(×)解析:MyISAM只有在无WHERE条件的count(*)时会直接读取内置的总行数计数器,速度快;一旦有WHERE条件,需要扫描全表,若InnoDB有适配的索引,执行速度会快于MyISAM。2.联合索引的查询条件列顺序必须和索引顺序一致,否则无法用到索引。(×)解析:MySQL优化器会自动调整WHERE条件的列顺序,只要条件包含索引的最左前列,就可以用到索引,和条件书写顺序无关。3.唯一索引的性能一定比普通索引高。(×)解析:查询时两者性能几乎一致;写入时唯一索引需要判断唯一性,无法用到changebuffer,写入性能比普通索引低。4.对大表执行ALTERTABLE添加字段时,一定会锁表导致业务不可用。(×)解析:MySQL8.0支持InstantDDL,新增无默认值的字段(或默认值为常量的字段)时,只需要修改元数据,不需要重建表,不会锁表,毫秒级完成。5.索引越多,查询速度越快。(×)解析:索引会降低写入性能,过多的索引会导致优化器选择索引的成本升高,反而可能降低查询效率,通常单表索引数量控制在5个以内为宜。6.limit100000,10的查询效率低是因为返回的行数太多。(×)解析:大偏移量limit查询效率低是因为需要扫描前100000行后才返回10条数据,优化方式为子查询先定位到偏移位置的ID,再关联查询返回数据。7.MySQL的lock_wait_timeout参数控制的是MDL锁的等待超时时间。(√)解析:lock_wait_timeout默认值为31536000秒(1年),同时控制行锁和MDL锁的等待超时时间。8.开启慢查询日志会严重降低数据库性能。(×)解析:慢查询日志仅记录执行时间超过阈值的SQL,在合理配置`long_query_time`(通常设置为1秒)的前提下,性能损耗小于1%,生产环境推荐开启。四、简答题(共4题)1.请说明脏读、不可重复读、幻读的定义,以及四个事务隔离级别分别解决了哪些问题?答案:脏读:一个事务读取了另一个未提交事务修改的数据,若另一个事务回滚,读取到的就是脏数据。不可重复读:同一事务内,两次读取同一行数据,中间另一个事务修改该行并提交,导致两次读取结果不一致。幻读:同一事务内,两次执行相同范围查询,中间另一个事务插入符合范围的新行并提交,导致第二次查询返回额外的行。隔离级别解决的问题:1.读未提交:未解决任何问题,存在脏读、不可重复读、幻读。2.读已提交(RC):解决脏读问题,存在不可重复读、幻读。3.可重复读(RR,MySQL默认):解决脏读、不可重复读问题,快照读下解决幻读,当前读仍存在幻读。4.串行化:所有事务串行执行,解决所有问题,但并发性能极低。2.现有1000万行的InnoDB表user(idINTPRIMARYKEYAUTO_INCREMENT,create_timeDATETIME,INDEXidx_crt(create_time)),需要删除2023年1月1日之前的300万行数据,避免锁表和影响线上业务,请写出最优方案。答案:优先采用分批次批量删除方案:1.先确定删除范围:`SELECTMIN(id)ASmin_id,MAX(id)ASmax_idFROMuserWHEREcreate_time<'2023-01-0100:00:00';`2.每次删除1000条,循环执行:`DELETEFROMuserWHEREidBETWEEN#{min_id}AND#{min_id+999}ANDcreate_time<'2023-01-0100:00:00';`,每次执行后暂停0.1秒,min_id每次累加1000,直到min_id>max_id。若删除数据占比超过30%,可采用表交换方案:1.新建同结构表:`CREATETABLEuser_newLIKEuser;`2.分批次插入2023年1月1日之后的数据:`INSERTINTOuser_newSELECT*FROMuserWHEREcreate_time>='2023-01-0100:00:00'ANDidBETWEEN#{start}AND#{end};`3.原子交换表:`RENAMETABLEuserTOuser_old,user_newTOuser;`4.确认业务正常后删除user_old表。注意事项:执行前备份数据,避开业务高峰期,控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论