关于这个问题,确实可以好好写一篇文章讲讲。我觉得这个问题很有思考的价值,因为这个问题将 MySQL 中两个比较重要的知识点都考到了。
这个问题假如是我回答的话,我的脑子会根据这个思维导图来回答:
第一种情况:
执行器更新完数据之后,一般是存储引擎先将这个更新的记录先写 redolog,然后 redolog 满了之后会刷新脏页,将数据写磁盘,这个时候当然没空执行你的 sql 语句了,所以那瞬间会有点慢。
第二种情况:
select * from T where ID=10;
就比如说这条语句,你想找 T表 中 ID=10 的行。但是有可能这个 T表 或者 ID=10 的行被上锁了,那这个时候你当然慢啦。
第三种情况:
优化器会通过采样的方式来判断索引的区分度,从而决定走不走索引。但是在采样的时候,采样到的数据刚好反应不出索引的区分度,导致优化器没走索引,走了全表扫描。那这个情况 sql 语句走全表扫描,肯定慢啦。