我接手了一个项目并有2个MyISAM表。
在项目中,这些表经常被访问,并且最初似乎没问题。
我在Windows 8.1上安装项目进行本地开发后,我发现每天,当我第一次访问该网站时,我的查询需要14秒。有点太多了。
之后不到0.1秒。
现在,因为在dev上积累的另一个查询会遇到php的超时异常,它让我担心是否建议对它做任何事情。在生产中似乎不会发生(或难以复制)。
我听说过温暖缓存或优化查询之类的东西,但不知道它是什么意思。
在这种情况下,专家喜欢做什么?
我设置了另一个问题here,试图看看我是否可以优化查询。
更改为InnoDB似乎没有影响。
答案 0 :(得分:0)
您运行查询的“第一次”时间可能会发生或可能不会发生两件事:
可以完成大量磁盘I / O 以从磁盘中获取索引块和/或数据块。 (如果其他查询碰巧已经获取了这些块,则可能已经缓存了这些块。)(14s vs 0.1s比我通常看到的冷/暖缓存差异更多。)
如果启用了“查询缓存”,则第一个SELECT
及其结果集存储在QC中。第二个电话可以在那里找到并几乎立即返回结果。 (通常这是〜1ms,而不是你提到的100ms。)通过说SELECT SQL_NO_CACHE ...
可以绕过单个查询的QC。
由于每天都很烦人,所以您也可以尝试优化查询。如果表每天都在增长,那么它可能会随着时间的推移变得越来越慢。请注意,如果由于任何原因需要重新启动生产,则该查询可能会超时。所以,是,尝试优化它。
一百万行开始变得“大”。
这表明您最初只受I / O限制。所以它并不表示key_buffer_size和innodb_buffer_pool_size太低。
如果您想讨论特定查询的效果,请启动新主题并提供SHOW CREATE TABLE
和EXPLAIN SELECT ...
。