3

我有以下情况:

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

大多数查询在一秒钟内运行(我使用 LIMIT 随时只获取 15 行)。但是,有一些罕见的查询需要更长时间才能运行(比如 2-3 秒)。我已尽我所能优化搜索表。

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

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

是否有一个原因?因为我认为 MyISAM 处理 SELECTS 彼此无关,而目前这不是我正在经历的行为......

提前致谢!蒂姆

4

2 回答 2

0

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

于 2009-03-25T16:25:28.727 回答
0

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

于 2011-12-07T17:06:20.837 回答