你好,面试官 | 我不仅知道MySQL索引,还会优化呢~

小龙有话说

本期会模拟面试 MySQL 索引更深层 相关内容。

涉及知识点,MySQL 索引设计原则,使用法则,MySQL优化等

本期题改编自 ——2021届秋招 北森 二面

面试现场

叮叮叮……

面试官:“你好,我是XX面试官,请问是小龙吗?”

小龙:“您好,面试官,我是小龙”

面试官:“好的,现在有空吗,我们开始面试吧”

小龙:“嗯嗯,准备好啦”

…….

other questions

…….

面试官:“我看你简历上有提到你对 MySQL 掌握得挺好的对吧?。”

小龙:“哈哈,还算可以吧!”

面试官:“好的,能告诉我 MySQL 中的怎样创建索引吗?”

小龙:“好的,我简单说几种。”

小龙:“一种是通过 alter 命令,ALTER TABLE table_name ADD INDEX index_name (column_list);”

小龙:“也可以在创建表时创建,CREATE INDEX index_name ON table_name (column_list);”

面试官:“好的,我们都知道索引用的好与坏,可以间接影响整个系统性能,那么你平时是怎样去设计索引的呢?”

小龙:“其实道理很简单,无须繁琐花哨,在公司项目中,我们更看重的是性价比。”

独白:“来了来了,幸好在我【面试笔记】中总结过,来吧,随便挑几点吹给你听。”

面试官:“说说看~”

小龙:“总的来说,你创建索引目的就是要在尽可能少占内存情况下去设计一个合适的索引让查询速度更快。”

面试官:“不错,接着说”

小龙:“我们一般建在 where 字段匹配条件后,为了让创建索引所带来的好处大于其坏处,我们一定要在数据量大,也就是基数大的情况下才考虑索引。”

小龙:“因为创建索引本身就要占空间,操作数据也要操作索引文件,数据少得不偿失。”

面试官:“嗯嗯,不错,还有吗?”

小龙:“嗯,为了使得效率更高,应该选择区分度大,匹配度高的字段建立索引 。而且索引不适合于频繁更新的数据,因为操作数据同事需要维护索引又得花费时间。”

面试官:“OK,那假如我本来已经创建了个 (a) 索引,但是由于需求我们现在需要加上(b)索引,你觉得怎样操作更好呢?”

小龙:“ 嗯,我觉得我们创建索引方面,我们应该尽量扩展索引,而不是创建新的索引,可以合理利用联合索引,如(a)->(a,b) 。”

小龙:“除此之外,我们在使用时还得考虑索引是否会失效。不恰当的使用索引,不仅没有提高性能,反而占额外内存空间,影响效率,所以说学会如何使用也是一门学问。”

面试官:“嗯嗯,那在使用时哪些地方需要我们注意呢?”

小龙:“这个在我【面试笔记】中详细总结过啦,随便给面试官举几个吧。”

小龙:“比如,我们在写模糊查询时,如果以 %开头,索引会因此失效。”

面试官:“那你知道具体原因吗?”

独白:“牛逼,这个考得还算有水平”

小龙:“其实,你理解了索引的构造排列,你就懂了。”

小龙:”我们通常用的索引数据结构是B+树,而索引是有序排列的;索引的排列顺序是根据比较字符串的首字母排序的,如果首字母相同,就根据比较第二个字母进行排序,以此类推。“

小龙:”因此如果把 % 放在了前面,最左的 n 个字母便是模糊不定的,无法根据索引的有序性 准确的定位到某一个索引,只能进行全表扫描,找出符合条件的数据。“

面试官:“嗯嗯,好的,基础不错,那在项目中有尝试去对MySQL进行调优优化这些吗?”

独白:“幸好在我【面试笔记】中从 索引+sql语句+数据库结构优化+优化器优化+架构优化 详细总结了。”

小龙:“ 优化我们可以从很多方面考虑,比如 索引+sql语句+数据库结构优化+优化器优化+架构优化,这里简单说几个吧!”

面试官:“可以。”

小龙:“比如,我们从基本的索引考虑,尽量使用覆盖索引,5.6了还支持索引下推呢!再写多读少的场景下,可以选择普通索引而不要唯一索引,不懂可以看上一篇文章。”

小龙:“当然需要考虑索引失效,和设计原则,上文说过了,不在赘述。”

小龙:“在写 sql 时,若是主键自增的表,还可以把 Limit 查询转换成某个位置的查询,比如 select * from tb_sku where id>20000 limit 10;这样可以很好利用主键索引快速定位。”

小龙:“优化器我们还可以使用 MRR 【Multi-Range Read】将 ID 或键值读到 buffer 排序,通过把「随机磁盘读」,转化为「顺序磁盘读」,减少磁盘IO,从而提高了索引查询的性能。就暂时只说这些吧!”

面试官:“哈哈,好的,没想到你还懂这些,不错。”

小龙:“对啦,在使用过程中,我们首先应该做到写一手好 SQL ,考虑索引失效,复合查询、事务、锁等,其实把这些都注意,工作中大多数问题都已经解决啦。”

小龙:“然后假如遇上了 SQL 执行变慢,此时我们应该先排查问题所在,如果可以直接找到问题可以直接解决。实在不行再考虑从优化器参数、架构、表设计等进行优化,这才是最好的优化方案。”

面试官:“说的很好,看来平时还是有认真学习参与项目中。”

面试官:“好的,时间差不多啦,今天暂时聊那么多,下期再谈谈。”

独白:“不愧是我,真男人是也!”

知识总结

本期我们通过面试模拟逐渐深入探讨了 MySQL ,下期会继续深入剖析关于 事务、锁、日志等底层实现原理。订阅+星标持续追更

面试重点

索引设计原则?使用索引注意点?MySQL优化方案等

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/259943.html<

(0)
管理的头像管理
上一篇2025-05-02 22:38
下一篇 2025-05-02 22:39

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注