作者回复: 😄确实例子都是血泪史,有些是我的血泪、有些是帮助人擦眼泪💧
也鼓励大家把平时碰到的问题提出来,大家一起未雨绸缪🤝
作者回复: 1. 这样理解也算对,不过要记得 主键也是索引的一种哈
2. 是的,所以说索引越多,“维护成本”越大
3. 如果是几百个儿子节点共用一个父节点,是不是就不会看上去那么浪费啦
4. 树高其实取决于叶子树(数据行数)和“N叉树”的N。 而N是由页大小和索引大小决定的。
5. 基本是你说的流程。不过不是“优化器”去取的,是执行器调用引擎,引擎内部才管理了你说的 段、页这些数据
作者回复: 1. 有的, Multi-Range Read (MRR) 由于不论是否使用这个策略,SQL语句写法不变,就没有在正文中提
2. 不是,是接口能力发生了变化,以前只能传“搜索关键字” 。
如果你用过5.1 甚至5.0, 在从现在的观点看,你会发现很多“匪夷所思”。还有:并行复制官方5.6才引入、MDL 5.5 才有、Innodb 自增主键持久化、多源复制、online DDL ...
只能说,持续进化,幸甚至哉😄
作者回复: 好问题,这个是关于“用索引” 和 “用索引快速定位记录”的区别。
08 篇讲到这个问题了,周五关注一下。
简单回答:“用索引”有一种用法是 “顺序扫描索引”
作者回复: 额你们DBA可能对自适应哈希索引(AHI)有误解…有其他同学也在评论中有提到AHI,我答疑文章会安排说明。
看你的描述,最好就是rename 重建一个新的,然后找低峰期删掉旧的表。
还有你这么说,应该id就是这个表的自增主键了,正常即使删除也不会全表扫描。不过我现在怀疑可能删的事务有没提交的,导致MySQL 没法回收复用旧空间。(这个可以简单从文件大小判断)
不过总之,rename +新建表,上面这个问题也自动解决了😓
作者回复: 赞,下次再问你就这么答,棒棒哒
作者回复: 回答得很好。
1. 没有存,就是一个临时内存,读出来马上判断,然后扫描下一行可以复用
2. Server层。 接上面的逻辑,读完以后顺便判断一下够不够limit 的数了,够就结束循环
3. 嗯,你很细心,其实它表示的是“可以下推”,实际上是“可以,但没有”😄
作者回复: 非常赞,尤其是第三段对“军规”的理解👍🏿
作者回复: 好问题,
第一个要树搜素5次
第二个搜索一次
作者回复: ……… 面试官是魔鬼吗😄
我怀疑他是想说用lock table 来实现,但是这样只能实现串行化隔离级别,
其它隔离都实现不了。
但是因为mysiam不支持崩溃恢复,所以即使用lock table硬实现,也是问题多多:
ACID里面, 原子性和持久性做不到;
隔离性只能实现基本用不上的串行化;
一致性在正常运行的时候依赖于串行化,在异常崩溃的时候也不能保证。
这样实现的事务不要也罢。
你这么答复面试官,应该能加到分吧😄
作者回复: 赞,很好的总结
作者回复: 是的,查询语句的where里面各个判断调换顺序没关系的
作者回复: 是的👍🏿
作者回复: 你的发现是对的,
因为覆盖索引的目的就是”不回表“,
所以只有索引包含了where条件部分和select返回部分的所有字段,才能实现这个目的哦