MySQL的:相同的选择慢,即使表不改变

时间:2018-11-22 08:32:05

标签: mysql performance

表格广告大约有0.5 mio行。

我使用的时间

select sql_calc_found_rows * from `ads` 
where cat1<>24 and 
      curdate()<=expiry and 
      offl=0 
order by ads.date desc ,id desc 
limit 0,30

每次都几乎需要相同的时间-即使广告没有变化。 mysql没有注意到这个事实吗?并加快???因此,当再次查询时,时间应该几乎为零。

1 个答案:

答案 0 :(得分:0)

查询缓存

  • 如果已配置质量控制,并且
  • 如果自运行 查询以来该表未更改,并且
  • 如果其他一些微妙的事情得到满足,那么

质量控制将非常快速地交付保存的结果集。但是,由于对表的限制没有改变,因此生产系统很少会从质量控制中受益。

innodb_buffer_pool

第一次运行查询时,数据可能位于磁盘上。因此查询必须获取数据并将其放入buffer_pool才能对其进行操作。

后续运行查询时,数据可能仍在该缓存中。如果是这样,它将更快。

索引

正确的索引编制是您加快查询速度的第一道防线。该特定查询可以受益于以下之一。 (很难说哪一种是最好的;只会使用一种。)

INDEX(date, id)
INDEX(offl, expiry)
INDEX(offl, cat1, expiry)