- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
MySQL索引面试题及答案(实战版)
一、基础概念类
1.面试官:你能通俗讲讲MySQL索引到底是什么吗?实际工作中它解决了什么问题?
答案:索引本质是MySQL的“快速查找数据的目录”——就像新华字典的部首目录,不用逐页翻找,能直接定位目标位置。实际工作中,没有索引时查询会走“全表扫描”(比如几万条数据查一条,要遍历所有行),而索引能把查询时间从秒级压到毫秒级。比如电商项目查用户订单,user_id加索引后,能直接定位该用户的所有订单,不会扫描其他用户数据。
2.面试官:索引这么好用,为什么不给所有字段都建索引?
答案:因为索引是“双刃剑”,有维护成本:①写操作(insert/update/delete)变慢——修改数据时,不仅要改表数据,还要同步更新索引(比如B+树索引要调整结构);②占用额外存储空间——索引文件可能比原表数据还大,比如一张1G的用户表,索引可能占500M;③优化器可能选错索引——索引太多时,MySQL优化器判断最优索引会出错,反而导致查询变慢。实际工作中只给“查询频繁、区分度高”的字段建索引。
二、索引类型与底层原理类
3.面试官:MySQL常见的索引类型有哪些?InnoDB默认用哪种?各自适用场景是什么?
答案:常见索引分4类,InnoDB默认是B+树索引:
①B+树索引:最常用,分聚簇索引和非聚簇索引。聚簇索引(主键索引)叶子节点存完整数据行,非聚簇索引(二级索引)叶子节点存主键ID;适用所有查询场景(单值查询、范围查询、排序),比如商品表id(主键)、goods_no(唯一索引)都用它。
②哈希索引:基于哈希表实现,查找快但不支持范围查询和排序;适合“等值查询频繁、无范围查询”的场景,比如缓存表的key字段(但InnoDB不支持手动建哈希索引,只能靠自适应哈希索引)。
③全文索引:针对文本内容(比如文章标题、正文)的关键词检索,支持MATCHAGAINST查询;适合博客、新闻的搜索功能,比如article表的content字段。
④前缀索引:取字段前N个字符建索引(比如varchar(255)字段取前20个字符),节省空间;适合长字符串字段(比如user表的email,前缀20个字符已能区分大部分值),但不支持覆盖索引。
4.面试官:聚簇索引和非聚簇索引的区别是什么?为什么InnoDB建议用自增主键当聚簇索引?
答案:核心区别在叶子节点存储内容:
聚簇索引(主键索引):叶子节点=完整数据行,查询时找到索引就拿到全部数据,不用回表;
非聚簇索引(二级索引):叶子节点=主键ID,查询时先查二级索引拿到主键,再查聚簇索引拿数据(这叫“回表”)。
建议用自增主键的原因:①自增主键是有序的,插入数据时B+树不会频繁分裂调整(如果用UUID,无序值会导致B+树频繁重构,性能差);②自增主键占用空间小(4字节int),二级索引叶子节点存主键ID时,能节省更多存储空间(如果用UUID,每个二级索引条目都要存16字节,索引文件会变大)。
5.面试官:什么是覆盖索引?实际工作中怎么用它优化查询?
答案:覆盖索引是“查询需要的字段都在索引里”,不用回表。比如user表有索引idx_name_age(name,age),查询selectname,agefromuserwherename=张三,因为name和age都在索引中,直接查索引就能返回结果,不用回表查聚簇索引。
实际优化场景:比如订单表order(id主键,user_id,order_no,create_time),经常查“用户的订单号和创建时间”(selectorder_no,create_timefromorderwhereuser_id=100),就给user_id和需要的字段建联合索引idx_user_order_create(user_id,order_no,create_time),这样查询就能走覆盖索引,避免回表,速度提升明显。
三、索引设计与优化类
6.面试官:联合索引的“最左前缀原则”是什么?设计联合索引时怎么排序字段顺序?
答案:最左前缀原则是“联合索引只能匹配索引最左边开始的连续字段”。比如联合索引idx_a_b_c(a,b,c),能匹配的查询条件是:
支持:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?(顺序可乱,MySQL优化器会调整);
不支持:whereb=?、wherec=?、whereb=?andc=?(跳过了最左边的a)。
字段顺序设计原则(核心:
您可能关注的文档
最近下载
- 光伏电站组件安装前测试记录及电源并网前单位工程调试报告(记录).doc VIP
- QCR 749.1-2020 铁路桥梁钢结构及构件保护涂装与涂料 第1部分:钢梁.docx VIP
- MTBE生产技术知识问答.pdf VIP
- (2025春新版本)部编版一年级语文下册《 端午粽》PPT课件.pptx VIP
- 第20课 第一次工业革命 课件(共25张PPT).pptx VIP
- 颖川陈氏经秀族谱目录.doc VIP
- 2025年河北省国富农业投资集团有限公司人员招聘笔试备考试题及答案解析.docx VIP
- 新人教版五年级数学上册《★掷一掷》部级优课陈萍老师—省级公开课课件.ppt VIP
- 古野GPS操作说明书中文_GP170.PDF VIP
- TT310系列超声波测厚仪.PDF VIP
原创力文档


文档评论(0)