你好,面试官 | 我不仅知道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)-