MySQL中是否可以启动长查询,并在长查询之前完成一个简短的查询?

时间:2015-05-29 04:28:18

标签: mysql

我们正在运行MySQL 5.6.15。我们有一个网站从数据库中获取数据以呈现每个页面。我们遇到一个问题,一旦在其中一个页面中启动了大型查询,(例如,某些页面具有启动大型查询以填充临时表等的计算工具......),所有其他页面在查询完成之前无法响应

在MySQL中是否可以启动大型查询,并且在运行时执行较小的查询并在大型查询之前完成它们?

其他细节:

  • 该网站使用一个帐户连接所有请求的数据库。
  • 在页面的生命周期中缓存与db的连接,并为每个页面实例建立新连接。
  • 只有少数人会使用该网站,因为它不在公共网站上。

此致

斯科特

1 个答案:

答案 0 :(得分:1)

听起来你的长时间运行的查询可能会锁定表,使得在释放锁之前其他查询无法从这些表中读取。有一种解决方法。见https://stackoverflow.com/a/918092/259457

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TABLE_NAME;
COMMIT;

您可以在运行较短的查询中执行此操作。这将忽略已放置在表上的任何锁。

然而,你必须意识到这将是一个"脏读,"这意味着您可以从表中选择非绝对最新的信息(它应该与在表上创建锁时的当前信息一样)。通常这不是一个问题,但需要考虑的事情。