如图,如果开始只加载了一部分索引,当一个新的查询来了,key又不再已经有的b树里面的话,应该去加载索引文件,不过应该加载索引文件的那个部分呢?当前情况只知道一个key其它都不知道,不应该是全部循环索引文件,mysql是怎么做的呢?或者有什么自己的办法的都行,先谢谢大家了;
链表, 你可以参考一下这篇文档,了解一下索引结构。
https://github.com/digoal/blog/blob/master/201605/20160528_01.md
https://github.com/digoal/blog/blob/master/201606/20160610_01.md
索引也是一颗B+树,MySQL会根据SQL中的数据去定位索引B+树中的叶子节点索引页。
如果访问的索引页不在内存里面,则会从磁盘读取到内存中,然后再根据索引页中的主键id去主表的B+树中定位相关的数据页。
这也是为什么一些SQL执行第一次比较慢,执行第二次就非常快了(排除query cache)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。