首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL锁定的表会影响相关视图吗?

MySQL锁定的表会影响相关视图吗?
EN

Stack Overflow用户
提问于 2010-06-09 18:31:43
回答 1查看 1.4K关注 0票数 2

因此,在阅读了PDO / PHP /MySQL中的性能:事务与直接执行关于性能问题的文章之后,我想到了一些关于在MySQL中锁定表的研究。

http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

表锁定使许多会话能够同时从表中读取,但如果会话想要写入表,则必须首先获得独占访问权。在更新期间,希望访问此特定表的所有其他会话都必须等待更新完成。

这部分特别让我印象深刻,因为我们的大多数查询将是更新而不是插入。我想知道是否有人创建了一个名为foo的表,其中执行了所有更新/插入,然后创建了一个名为foo_view的视图( foo的一个副本,或者是foo,以及其他几个表加foo的链接),是否还会发生锁定问题?

也就是说,在foo_view上选择查询还需要等待更新完成吗?

我的同事又问了一个简短的问题。这会影响缓存吗?也就是说,如果缓存了SELECT,它将命中缓存并返回结果,还是等待锁先完成?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-09 18:38:28

您的视图将经历与基础表相同的锁定。

来自锁紧上的锁紧参考页面

MySQL授予表写锁如下:

  1. 如果表上没有锁,就在表上设置写锁。
  2. 否则,将锁请求放入写锁队列中。

MySQL授予表读锁如下:

  1. 如果表上没有写锁,就在表上设置一个读锁。
  2. 否则,将锁请求放入读锁队列中。

值得一提的是,这取决于您正在使用的数据库引擎。MyISAM将按照上述步骤锁定整个表(即使它被分割成多个分区),其中像InnoDB这样的引擎将执行行级锁定。

如果您没有使用MyISAM达到必要的性能基准,并且已经表明瓶颈是通过更新等待表锁,那么我建议将表的存储引擎更改为InnoDB。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3008741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档