MySQL不走索引时的行锁升级表锁的问题
周昭鹏 2020-06-30 03:21:06 我在网上看到一篇博客写到:
“
当 SQL 语句无法使用索引时,会进行全表扫描,这个时候 MySQL 会给整张表的所有数据行加记录锁,再由 MySQL Server 层进行过滤。但是,在 MySQL Server 层进行过滤的时候,如果发现不满足 WHERE 条件,会释放对应记录的锁。这样做,保证了最后只会持有满足条件记录上的锁,但是每条记录的加锁操作还是不能省略的。
”
MySQL 使用 InnoDB 引擎时,当语句不走索引进而导致全表扫描时,是直接加表锁?还是在每条记录上加记录锁?还是MySQL中的表锁就是用所有记录的锁形成的?
博客这段话是否正确,如果正确,按照我都理解,MySQL为表直接加锁的代价难道不比给每个记录都加锁的代价小?