版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySQL去重经典面试题及详细答案(实战版)说明:所有题目均为互联网公司高频面试原题,答案基于实际工作场景编写,摒弃书面化套话,侧重落地实操、原理讲解和避坑要点,适配开发、测试、数据分析岗位面试。一、基础概念题:什么是数据库数据重复?日常开发中哪些场景会产生重复数据?参考答案:数据库中的重复数据,简单来说就是表中存在多条核心业务字段完全一致的记录,主键、自增ID不同不代表数据不重复。日常产生重复数据的常见场景主要有4类:1.前端重复提交:用户快速点击提交按钮、网络卡顿重复请求,后端没有做幂等校验,导致多条相同数据入库。2.后端重试机制:接口调用失败、超时重试,定时任务重复执行,未做唯一约束,产生重复数据。3.数据同步问题:多库同步、日志采集、批量导入数据时,重复导入同一批次数据。4.约束缺失:数据表未设置唯一索引、主键、联合唯一约束,从根源上无法拦截重复数据写入。面试加分点:物理ID(id)不同不算重复,业务维度一致才算真正的数据重复,去重核心是保留业务唯一数据。二、MySQL常用的去重方式有哪些?各自适用什么场景?参考答案:工作中主流的4种去重方式,场景区分非常明确:1.DISTINCT去重(查询去重)仅用于查询展示,不会修改原表数据。适合临时统计、数据预览,去除查询结果中的重复行。缺点:无法保留重复数据中的指定记录,只能统一去重展示。2.GROUPBY分组去重(查询/统计去重)按业务唯一字段分组,搭配聚合函数(MAX、MIN)可以筛选出需要保留的数据,既能去重,又能获取每组最新/最早数据,是查询去重最常用的方式。3.ROW_NUMBER()窗口函数去重(精准去重)MySQL8.0及以上版本支持,可以给重复数据排序编号,精准删除多余重复数据,生产环境清理重复数据首选,逻辑清晰、不易误删数据。4.主键/唯一索引约束(预防去重)属于事前预防,不是事后清理。给业务唯一字段添加唯一索引,直接拦截重复数据写入,从根源杜绝重复,是最优解决方案。三、简单查询去重:DISTINCT和GROUPBY去重有什么区别?工作中怎么选?参考答案:核心区别:1.作用逻辑不同:DISTINCT是对整行所有字段做唯一性比对去重;GROUPBY是对指定字段分组去重,自由度更高。2.功能不同:DISTINCT只能单纯去重;GROUPBY可以结合聚合函数,完成去重+统计、去重+筛选最新数据的需求。3.性能差异:单字段去重两者性能接近;多字段去重、大数据量场景下,GROUPBY优化空间更大,效率更高。使用选择:1.仅需要单纯去除重复结果、简单数据预览,用DISTINCT;2.需要按指定字段去重,同时需要取最大值、最小值、最新数据,优先用GROUPBY。实操示例:PlainText
#DISTINCT去重(整行去重)
SELECTDISTINCTusername,phoneFROMuser_info;
#GROUPBY去重(指定字段分组,保留最新ID)
SELECTusername,phone,MAX(id)ASidFROMuser_infoGROUPBYusername,phone;四、实战高频题:表中存在大量重复数据,重复规则为【姓名+手机号】一致,需要保留最新一条数据,删除其余重复数据,怎么实现?场景说明:user_info表,id自增主键,name、phone存在重复,重复数据保留id最大的最新记录,删除老旧重复数据。参考答案(MySQL8.0+窗口函数最优解法,生产常用)原理:根据重复字段分组,按id倒序排序,给每组数据编号,删除编号大于1的重复数据(仅保留编号1的最新数据)。PlainText
#步骤1:查询所有需要删除的重复数据(先核查,避免误删)
SELECT*FROM(
SELECT
*,
ROW_NUMBER()OVER(PARTITIONBYname,phoneORDERBYidDESC)ASrn
FROMuser_info
)tWHEREt.rn>1;
#步骤2:正式删除重复数据
DELETEFROMuser_infoWHEREidIN(
SELECTidFROM(
SELECT
id,
ROW_NUMBER()OVER(PARTITIONBYname,phoneORDERBYidDESC)ASrn
FROMuser_info
)tWHEREt.rn>1
);低版本MySQL(5.7及以下)兼容解法:无窗口函数,通过子查询比对分组最大ID实现PlainText
#删除姓名+手机号重复,且id不是最大值的老旧数据
DELETEaFROMuser_infoa
JOINuser_infob
ON=ANDa.phone=b.phone
WHEREa.id<b.id;面试避坑要点:1.生产环境删除数据前,必须先查询校验需要删除的数据,禁止直接执行删除语句;2.优先保留最大ID/最新创建时间的记录,符合业务数据更新逻辑;3.低版本MySQL不能直接在子查询中更新本表,必须用联表查询方式。五、经典易错面试题:为什么不能直接用DELETE+DISTINCT去重?参考答案:1.语法层面:DISTINCT是查询关键字,仅用于SELECT语句,MySQL不支持DELETE语句中直接使用DISTINCT,语法会直接报错。2.逻辑层面:DISTINCT只能筛选出不重复的数据,无法定位需要删除的重复数据,无法区分保留哪条、删除哪条,不具备删除去重的能力。3.核心结论:DISTINCT只能做查询结果去重,所有物理删除重复数据的场景,都需要用窗口函数、联表删除、分组比对的方式实现。六、大数据量表去重(百万级、千万级数据),直接删除为什么慢?优化方案是什么?参考答案:直接删除慢的原因:1.大批量删除数据会产生大量undo日志、redo日志,占用数据库IO,锁表时间长,影响业务;2.删除大量数据后,数据表产生大量碎片,索引失效,查询性能下降;3.大事务执行时间过长,容易触发数据库超时、主从延迟激增问题。大数据量去重最优优化方案(生产标准流程):1.分步分批删除:通过LIMIT限制单次删除条数,循环执行,避免大事务;2.临时表迁移法(千万级数据首选)先将去重后的唯一数据迁移到新临时表,清空原表,再将数据迁回,效率远高于逐条删除。PlainText
#1.创建临时表,存入去重后的数据(保留最新数据)
CREATETABLEtemp_user_infoAS
SELECT*FROMuser_infoWHEREidIN(SELECTMAX(id)FROMuser_infoGROUPBYname,phone);
#2.清空原表
TRUNCATETABLEuser_info;
#3.数据迁回原表
INSERTINTOuser_infoSELECT*FROMtemp_user_info;
#4.删除临时表
DROPTABLEtemp_user_info;3.事后优化:数据去重完成后,执行OPTIMIZETABLE整理碎片,恢复索引性能;4.事前根治:给业务唯一字段添加联合唯一索引,彻底杜绝重复数据产生。七、终极面试题:如何从根源避免数据库产生重复数据?参考答案:事后去重只是补救方案,真正最优的方式是事前拦截,从4个维度规避重复数据:1.数据库层:添加唯一约束根据业务场景,给单一字段或多个字段添加唯一索引/联合唯一索引,数据库自动拦截重复写入,是最核心、最有效的方案。PlainText
#联合唯一索引(姓名+手机号唯一)
ALTERTABLEuser_infoADDUNIQUEINDEXidx_name_phone(name,phone);2.前端层:做防重提交点击按钮后禁用提交按钮,设置短时间防抖,避免用户重复点击触发重复请求。3.后端层:实现接口幂等性通过唯一订单号、请求令牌、分布式锁、Redis防重key,保证同一请求只会执行一次,适配重试、定时任务场景。4.数据同步层:批次去重批量导入、数据同步时,提前对数据源做去重处理,避免重复数据入库。八、面试高频追问:唯一索引可以为NULL吗?会不会产生NULL值重复?参考答案:1.MySQL中,唯一索引允许存储NULL值;2.唯一索引认为NULL!=NULL,所以可以存在多条NULL值记录,会出现空值重复的情况;3.避坑方案:如果业务字段不允许为空且需要唯一,必须设置NOTNULL+唯一索引,双重约束杜绝重复数据。九、简答题:TRUNCATE和DELETE清空表去重的区别?参考
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗器械考试试题及答案
- 2025年医院环境的清洁与消毒知识试题附答案
- 2025年游泳救生员考试题库及答案
- 2025年政府采购评审专家真题试卷+答案
- 2025年执业医师考试病史采集病例分析试题答题纸及答题及答案
- 2025年主管护师考试考题及答案
- 2025食品考试试题及答案
- 2026版放射卫生监测防护管理指南培训试题及答案
- 2026年安全员B证考试题库(含答案)
- 苏教版初中历史八年级下册第8章改革开放同步练习题及答案
- 社会工作者考试题库(1000题·含答案与解析)
- 设备日常点检维护管理规范
- 儿童急性呼吸道感染诊疗共识2026
- 电商客服分包合同模板
- 2026山东东诚投资发展有限公司招聘总经理助理5人备考题库及参考答案详解一套
- 高中生物全部知识点系统总结
- 中国华氏巨球蛋白血症诊疗指南(2025版)
- 中国脓毒症诊疗指南2025版
- 第9章 因式分解(单元练习)-2025-2026学年苏科版数学八年级下册
- 老年人法律知识防骗讲座
- 2025年雕刻软件ZBrush教程
评论
0/150
提交评论