关于count(*)和联表查询和锁表的问题
初学MySQL,在描述时候如果有不对的地方,希望各位大大指出。
我在看书的时候看到了这么一句,在生产环境中请不要随意使用count(*),因为它将会进行表级锁定(inno DB下)。
因为最近在做数据统计,所以想到了一个问题,假设有如下一条SQL语句。
select count(b.id) from a,b where a.id = b.id;
根据执行顺序,先从from语句开始,a表与b表在内存中产生一张虚拟表VT1,那么之后的count操作应该就是在VT1上进行了,这个时候表A或者表B会被进行锁定吗?
假如在这个过程中没有锁定,请问是在何时解锁的?VT1产生的时候?
假如这个过程中仍然被锁定,请问是否在SQL语句结束后才会产生解锁?
如果有描述不清或者我理解错误的地方,希望指出,谢谢