微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[MySQL] 索引优化不只是用于面试

面试的时候,大部分面试官会问MysqL的索引问题,也是必问的问题,但是感觉大部分面试官都是把网上的面试题原封不动的说出来,要开发人员来应试答题.

这样的形式,我的理解是既不能体现出面试官的能力,又不能考察到程序员的MysqL功力,基本是无意义的 .

 

如何在平常的开发中体现出这些存在于理论上的原理性的知识点,是我一直思考的问题.

在开发的时候,当构思完成后,第一步就是设计表结构 . 我们设计表,基本的思路就是

 

设计一个字段自增,设计其他字段,设置自增id为主键,表的存储引擎为innodb .

在这个过程中,就能体现出了很多索引方面的东西,设计主键的目的是使整张表根据主键聚簇起来,变成一个树的样子 .树的叶子节点就是实际记录,其他分叉就是根据主键生成的,如果要查询数据,根据主键id查,速度最快. 这样的形式还有个名词叫聚簇索引

 

当然除了根据主键id查,我们还会根据其他字段进行查询,需要我们提前想好未来的查询sql是什么,被查询的字段是什么,要查询出的字段是什么 .

如果我们有根据两个字段进行的and条件查询,就可以把这两个字段做成一个联合索引,比如字段是a,b ,我们设计的联合索引就可以是(a,b) .

设计完成后会在表的整体之外多了这样一个(a,b)的索引树,这个索引树的叶子节点是主键,我们查询的时候会现在这个(a,b)索引树里查到叶子主键,再通过主键在刚才的主键树上查到叶子记录,这样就会出现两次查询的过程.如果我们要查询的字段数据只有a,b,那么就直接在刚才的(a,b)索引树取出来了,这个名词就叫覆盖索引

 

联合索引的最左前缀,又是什么呢?

因为b+树,这样的索引树,跟二叉搜索树一样,都是要求有序的 . 我们的(a,b) 也是会是排好序的,排序就要有个先后,先排好a,在a的基础上再排b . 因此就会在查询的过程中不能跳过a直接去查b,就体现出了最左前缀.

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐