有人问你MySQL是如何查询数据
篇我们说到了关于MySQL的索引的原理,主要说的是 MySQL 对于索引的字段是怎么去维护的,我们再来简单的回顾下: MySQL 对于主键索引的维护是最简单的,就是根据主键去维护一个 B+ 树,因为主键的特点一般是递增的,也就是说是有序的,所以 MySQL 在维护的时候只需要将记录依次往数据页中追加即可,数据页满了就继续添加到下一个数据页。且每一条记录是完整的,即所有的列的值都维护。 但是对于非主键索引,在维护 B+ 树的时候,会根据联合索引的字段依次去判断。 假设联合索引为:name + address + age,那么 MySQL 在维护该索引的 B+ 树的时候,首先会根据 name 进行排序,name 相同的话会根据第二个 address 排序,如果 address 也一样,那么就会根据 age 去排序,如果 age 也一样,那么就会根据主键字段值去排序(主键不可能是一样的),且对于非主键索引,MySQL 在维护 B+ 树的时候,仅仅是维护索引字段和主键字段。
另外 B+ 树的结构大致是这样子的: ,我们就来一起看看对于 MySQL 的查询有哪些基本的原则。 因为只要在了解原则的基础之上,才能够写出符合预期的 SQL,才能知道自己的 SQL 到底有没有使用到索引。这是一个最最基本的原则。 本文因为讲的是一些原则,所以很多东西不是很好画图,但是能画我一定给大家画。 等值匹配原则 我们现在已经知道了如果是【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分裂到另外一个数据页,然后再通过索引页来维护数据页。 数据页之间是通过双向链表来维护的,索引页如果过多就会往上分裂(就像上面这张图),以此类推,这样就形成了由组件组成的 B+ 树结构,即【聚簇索引】 但是问题是我们不仅建立了主键索引,同时也建立了非主键索引,那这时候非主键索引是如何维护的呢? 因为对于主键索引是不可能重复的,所以在保存到数据页的时候是直接追加插入的(我们默认主键是自增的) 至于非主键一般是可以重复的,假设此时某个联合索引字段的值真的都 (编辑:大同站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |