查询缓存MySQL

时间:2017-05-02 10:46:14

标签: mysql caching

我尝试使用查询缓存。缓存应该将查询与结果一起存储。所以我启用了my.cnf中的查询缓存。 持续时间告诉我它有效:

RESET QUERY CACHE;
SELECT * FROM t_data GROUP BY col2;  //duration: 0.034sec
SELECT * FROM t_data GROUP BY col2;  //duration: 0.015sec
SELECT * FROM t_data GROUP BY col2;  //duration: 0.014sec

实际上一切都很好,但之后我在这个查询中使用了EXPLAIN。 结果就是这样:

id |  select_type | table  | type  |  possible_keys  | key  | key_len | ref | rows  | Extra

1  |  SIMPLE      | t_data | ALL   |                 |      |         |     | 921   | Usi..

那么为什么我在列行中得到921?结果只有15行。如果认为MySQL采用在缓存中通过此查询连接的表。为什么再次搜索MySQL整个表? 是我的第一篇文章。我希望一切都正确!

1 个答案:

答案 0 :(得分:0)

execution plan 解释了MySQL 如何执行查询(强调我的)。换句话说,它是询问MySQL如何处理给定SQL查询以获取所请求信息的结果。因此,它通常可以很好地估计查询的速度,但它并不意味着实际的查询执行。此外,它也没有显示实际的行号,主要是因为它通常不会知道真实的数字而且如果没有实际运行查询就无法获得它。

另一方面,MySQL Query Cache是一个完全避免查询执行的功能:

  

查询缓存存储SELECT语句的文本   发送给客户端的相应结果。如果相同   稍后收到语句,服务器从中检索结果   查询缓存而不是再次解析和执行语句

执行查询时获得的指标称为profiling;这是完全不同的事情。有些DBMS提供了非常好的每个查询分析功能,据我所知只有一些通用数据。