MySQL - Concurrent SELECTS - 一个客户端等待另一个客户端?

时间:2009-03-25 16:20:08

标签: mysql select myisam concurrency

我有以下情况:

我有一个数据库,其中包含大约400万行的特定MyISAM表。我使用存储过程(MySQL版本5.1),尤其是使用各种标准搜索这些行。该表上有几个索引,通过该存储过程的查询通常非常快(<1s)。基本上我使用预准备语句并在此搜索sp中创建并执行一些动态SQL。执行准备好的语句后,执行“DEALLOCATE PREPARED stmt;”

大多数查询都在一秒钟内运行(我使用LIMIT可以随时获得15行)。但是,有一些罕见的查询需要更长的时间才能运行(例如2-3s)。我尽可能地优化了搜索表。

我开发了一个Web应用程序,我可以在我的开发机器上运行并查看快速查询的结果。

但是,如果我打开两个浏览器实例并同时进行搜索(针对开发机器),一个查询运行时间较长,另一个查询速度较快,则会同时返回结果,即似乎好像快速查询在返回结果之前等待较慢的查询完成。即两个查询都需要2-3秒......

这有什么理由吗?因为我认为MyISAM处理SELECTS而不管彼此如何,目前这不是我遇到的行为......

提前致谢! 添

2 个答案:

答案 0 :(得分:0)

这只是因为你是从同一台机器上做的,如果搜索来自两台不同的机器,它们会同时进行。你是否真的希望一个人能够通过打开一堆浏览器窗口并点击刷新来阻止你的MySQL服务器?

答案 1 :(得分:0)

这是对的。 MyISAM表上的每个选择查询都会锁定整个表,直到完成为止。他们的理由是,它实现了“非常高的读取吞吐量”。切换到innoDB将允许并发读取。