我应该关注哪里:优化查询,更改数据库配置或其他什么?

时间:2015-07-02 16:39:35

标签: mysql query-performance

我接手了一个项目并有2个MyISAM表。

  • table1 with about。 1M行和
  • table2 with about。 100K行。

在项目中,这些表经常被访问,并且最初似乎没问题。

我在Windows 8.1上安装项目进行本地开发后,我发现每天,当我第一次访问该网站时,我的查询需要14秒。有点太多了。

之后不到0.1秒。

现在,因为在dev上积累的另一个查询会遇到php的超时异常,它让我担心是否建议对它做任何事情。在生产中似乎不会发生(或难以复制)。

我听说过温暖缓存或优化查询之类的东西,但不知道它是什么意思。

在这种情况下,专家喜欢做什么?

我设置了另一个问题here,试图看看我是否可以优化查询。

更改为InnoDB似乎没有影响。

1 个答案:

答案 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 TABLEEXPLAIN SELECT ...