18 SQL语句的执行逻辑
18 SQL 语句的执行逻辑
B+树可以快速定位,来源于同一层兄弟节点的有序性。
- 对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。
- 连接查询的两个表的字符集不同的话,对应的连接过程中要求再被动驱动表的索引字段上加上函数操作,最终会导致对被驱动表做全表扫描。
幻读
幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。
- 幻读在“当前读”下才会出现;
- 幻读仅专指“新插入的行”。
解决方案:
产生幻读的原因是,行锁只能锁住行,但是新插入记录这个动作,要更新的是记录之间的“间隙”。因此,为了解决幻读问题,InnoDB只好引入新的锁,也就是间隙锁(Gap Lock)。
间隙锁和行锁合称next-key lock,每个next-key lock是前开后闭区间。
间隙锁和 next-key lock 的引入,帮我们解决了幻读的问题,但同时也带来了一些“困扰”。