zoukankan      html  css  js  c++  java
  • 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;

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

  • 相关阅读:
    mysql小数和类型转换函数
    concat()用法
    sql修改表名字段名
    having函数,case when与order by
    volatile实现原理与应用
    synchronized的实现原理与应用
    java8策略模式
    centos7快速升级gcc
    一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情
    Java注解
  • 原文地址:https://www.cnblogs.com/catkins/p/5270443.html
Copyright © 2011-2022 走看看