携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
数据库对于服务端开发而言,非常重要,而MySQL又是现在国内大厂争相使用的宠儿,所以熟练运用MySQL,对于一名服务端开发同学来说,就显得尤为重要。
MySQL之所以被作为很多开发者的首选,无外乎以下几个原因:1.开源社区完善,文档相对健全,开发者数量庞大,你遇到的问题绝大部分都可以在社区里找到答案或者寻求帮助;2.具备足够的灵活度,引入了插件式存储引擎体系结构,这也就为性能优化与权衡设计提供了可能;3.针对大部分编程语言,都能找到对应的连接MySQL的client SDK,特别是Golang中的GORM,我本人就非常喜欢用。
在这个系列中,我想由浅入深地讨论一下MySQL中的索引机制,并结合源码进行相应的原理分析。合理的索引设置在MySQL性能调优中是不可缺少的一环,也是后端开发工程师的必备技能。
这里先简单介绍一下索引的基本概念。其实大家在日常生活中,应该也都或多或少接触过“索引”这个概念,如果这个概念感觉比较陌生,那“目录”大家总听过吧。一本大部头的书,只有有了目录,才能提高检索的效率,凭借页码,我们可以轻松地找到每个章节的开始,索引的作用其实和目录完全一致,也是为了提高检索的效率,快速在数据库中找到符合条件的记录。
MySQL索引可以分为普通索引、唯一索引、主键索引、全文索引。索引底层是通过B+ 树来组织的,B+树的特点是一般树的高度不会太高、每一层的节点数以及节点内的关键字会相对较多,翻译成通俗一点的话就是比较“矮胖”。唯一索引的特点是它可以保证关键字的唯一性。主键索引除了兼顾唯一索引的保证唯一性的特点,还保证了非空(即不为NULL)的数据特征。全文索引则是在泛搜索领域会用得多一些,主要作用是帮助检索大段长文本。