mysql查询的cache

Mysql SQL_NO_CACHE不生效的问题

我想通过SQL_NO_CACHE得知某个query查询速度,但似乎无法实现

例如首次查询:

  1. mysql> select count(*) from users where email = 'hello';
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. | 0 |
  6. +----------+
  7. 1 row in set (7.22 sec)

再次查询可以看到其结果被缓冲:

  1. mysql> select count(*) from users where email = 'hello';
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. | 0 |
  6. +----------+
  7. 1 row in set (0.45 sec)
  8. mysql> select count(*) from users where email = 'hello';
  9. +----------+
  10. | count(*) |
  11. +----------+
  12. | 0 |
  13. +----------+
  14. 1 row in set (0.45 sec)

这时候加入SQL_NO_CACHE的查询结果却是:

  1. mysql> select SQL_NO_CACHE count(*) from users where email = 'hello';
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. | 0 |
  6. +----------+
  7. 1 row in set (0.43 sec)

为什么 SQL_NO_CACHE 完全没用?

怎么可以再次得到第一次7.22秒的查询?

评论 (2) •  • 链接 • 2012-09-02 
  • 0
    表是 MyISAM 的吧? – 冯义军 2012-09-02
  • 0
    @冯义军 是 – 贾春春 2012-09-02
2个答案

从mysql手册上看到一句话 SQL_NO_CACHE 查询结果不被缓存,我的理解是:select 语句中使用 SQL_NO_CACHE 的意义为 这次查询的结果不会被缓存,如果这条语句的结果已经被缓存过,那么还有可能将会之前的缓存结果返回。及使query_cache_type 为 ON 或 1 。

如果想查询结果不使用缓存那么可以在查询之前修改 query_cache_size :

  1. set global query_cache_size = 0;

然后在进行查询,之前被缓存过的语句,也将无效。

还有就是修改 query_cache_type 为 off 或 0 :

  1. set [global,session] query_cache_type = 0;

这样会阻止使用缓存或阻止查询结果缓存

原文地址:https://www.cnblogs.com/catkins/p/5270443.html