由于我们在 where 条件里没有用到分区键 timestamp , 那么 MySQL 要访问每张表, 就需要给每张表上 IX 锁.
场景2:
这次我们换成 RR 隔离级别:
?
查看锁信息:
?...场景4:
我们在 where 中只使用分区键, 但是条件复杂一点, 换成比较符(大于/小于):
?
查看锁信息:
?
可以看到各分区上的 IX 锁又出现了, 跟场景3的结论又出现了偏差....还得回到官网:
MySQL 可以根据 where 条件中的分片键信息, 过滤出相关的分片, 仅在相关分片上用锁, 这技术成为 partition pruning....否则, 分区表的使用会带来锁数量的上升....与场景1下同样的SQL:
?
查看锁信息:
?
发现与场景1不同, 除了所有分区上都有IX锁, 所有行都上有行锁
大家有兴趣的时候, 可以尝试解释这个现象
----