我有以下场景:
我有一个数据库,其中有一个特定的MyISAM表,大约有400万行。我使用存储过程(MySQL V5.1),特别是一个存储过程,根据各种条件搜索这些行。这个表上有几个索引,通过这个存储过程进行的查询通常非常快(<1秒)。基本上,我在这个搜索sp中使用了预准备语句,并创建和执行了一些动态SQL。在执行准备好的语句之后,我执行"DEALLOCATE prepared stmt;“
大多数查询的运行时间不到一秒钟(我使用LIMIT在任何时候只获取15行)。然而,有一些罕见的查询需要更长的运行时间(比如2-3秒)。我已经尽可能地优化了搜索表。
我已经开发了一个web应用程序,我可以在我的开发机器上运行并在不到一秒钟的时间内看到快速查询的结果。
但是,如果我打开两个浏览器实例并同时执行搜索(针对开发机器),一个使用运行时间较长的查询,另一个使用较快的查询,则同时返回结果,即快速查询似乎等待较慢的查询完成后才返回结果。也就是说,两个查询都需要2-3秒...
这是有原因的吗?因为我认为MyISAM会处理彼此无关的选择,而目前这不是我所体验到的行为……
提前感谢!时间
发布于 2009-03-25 16:25:29
这是因为你在同一台机器上进行搜索,如果搜索来自两台不同的机器,它们将同时进行。你真的希望一个人仅仅通过打开一堆浏览器窗口并点击刷新就能使你的MySQL服务器瘫痪吗?
发布于 2011-12-08 01:06:21
这就对了。MyISAM表上的每个select查询都会锁定整个表,直到查询完成。他们的借口是,这实现了“非常高的读取吞吐量”。切换到innoDB将允许并发读取。
https://stackoverflow.com/questions/682344
复制相似问题