首页 > 数据库 > 数据库开发技术 > 知识点有点密集哦这个讨论,有课代表在,聊挺深~
A: 我想问下,比如查找a=1这样记录,在非叶子节点我们已经扫描到1这样记录,而且非叶子节点也有主键id,那他还有必要查到叶子节点去拿叶子节点的主键id再回表嘛?能不能直接通过非叶子节点的主键id去回表呢? |
|
A:为啥一定要到叶子节点再回表 非叶子节点遍历到的满足条件的a=1 也只是叶子节点中最小的值符合 对于多条符合a=1的值肯定需要继续访问叶子节点page的next记录 那非叶子节点的next记录不是a=1的值了。 B: 这个是合理解释之一👍我来补一个:叶子结点所在的page上的“最后更新的事务id”,是用来辅助判断数据可见性的。就是说在非叶子结点上看到的记录,可能是对当前语句不可见的,到叶子上才能判断。 |
D: 最后更新的事务id,非主键索引的页也有这玩意? |
|
D: 那非主键索引上有版本链么,如果两个事务,都用覆盖索引,其中一个事务update后还未提交事务了,另一个事务此时读的话,不得在版本链里往前找吗 E: 先用事务id判断是不是需要回表,需要回表的就回表,主键上才有回滚段,才能拿到历史版本,拿到之后再判断结果集里要不要返回,这种情况下,覆盖索引的优化其实没用上 |
另一个系列:
入群加V:linxiaobin3306 感谢群里参与回答的 Zhu DR,Dong PL, Zhang GC, Wang ZJ.
推荐文章:《MySQL进阶单元课》前十单元大纲
原文作者:丁奇3306;如有侵权,请联系管理员删除。