• 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;

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

  • 相关阅读:
    总纲与计划(持续更新)
    【MyBatis】MyBatis缓存
    【MyBatis】MyBatis源码架构
    【JVM】CPU飙升问题
    【Spring boot】SpringApplication三板斧
    【MySQL】借助binlog排查一次生产问题
    【Docker】常用命令
    【Python】CentOS7安装Python3.7以及注意事项
    【高并发】乐观锁和悲观锁
    【java基础】说清楚equals和==
  • 原文地址:https://www.cnblogs.com/catkins/p/5270443.html
Copyright © 2020-2023  润新知