问题描述
|
我们正在考虑在应用程序中使用MysqL合并视图,并在文档中遇到以下令人费解的语言:
明确选择TEMPTABLE的原因是,可以在创建临时表之后以及在完成完成对语句的使用之前在基础表上释放锁。与MERGE算法相比,这可能导致更快的锁定释放,因此不会长时间阻塞使用该视图的其他客户端。
我的阅读方式是在合并视图上进行选择以读取锁定,但这似乎不正确。两个客户可以像从表中同时读取视图一样吗?
谢谢!
解决方法
如果在MyISAM表上创建视图,则SELECT和UPDATE是互斥的,因此表上的SELECT / UPDATE将阻止该视图上的任何UPDATE / SELECT。因此,您希望保持较短的锁定时间。
在InnoDB上,这不是问题。
,我读它的方式是,尽管它确实取出了一个锁(它必须读取数据,对吗?),但是它会生成一个TEMPTABLE,然后释放该锁。此后要做的任何工作都可以在没有锁的情况下完成,因此其他客户端可以从基础表中获得乐趣。
读取锁定可以通过这种方式更快地释放。