美文网首页高性能MySQL程序员
MySQL查询缓存命令大全

MySQL查询缓存命令大全

作者: 码西西 | 来源:发表于2017-08-25 03:21 被阅读71次

    MySQL查询缓存功能对一条SQL查询语句第一次执行时,会将其结果缓存起来。以后执行同一条语查询句时(SQL字符串必须完全相同),可以跳过SQL解析优化查询等阶段,直接返回缓存结果给用户。
    如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, 或DROP DATABASE等操作时,之前的缓存会失效并且删除。这也在一定程度上会影响我们数据库的性能,所以对一些频繁的变动表的情况开启缓存是不明智的。
    通常安装时默认是开启查询缓存功能的。

    1. 查看当前MySQL服务器是否包含查询缓存功能

    mysql> SHOW VARIABLES LIKE 'have_query_cache';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | have_query_cache | YES   |
    +------------------+-------+
    

    2. 查看查询缓存开启情况

    mysql> show variables like '%query_cache%'; 
    +------------------------------+----------+
    | Variable_name                | Value    |
    +------------------------------+----------+
    | have_query_cache             | YES      |
    | query_cache_limit            | 1048576  |
    | query_cache_min_res_unit     | 4096     |
    | query_cache_size             | 20971520 |
    | query_cache_type             | ON       |
    | query_cache_wlock_invalidate | OFF      |
    +------------------------------+----------+
    /*
    query_cache_type:
    OFF(0):    关闭查询缓存。
    ON(1):     除了带SELECT SQL_NO_CACHE ... 参数的查询语句都使用查询缓存。
    DEMAND(2): 只有带SELECT SQL_CACHE ... 参数的查询语句才使用查询缓存。
    */
    

    3. 开启查询缓存

    /* 方法1:临时设置 */
    mysql> SET GLOBAL query_cache_size = 20971520;
    mysql> SET SESSION query_cache_type = DEMAND;
    /* 
    query_cache_size: 设置缓存空间大小(字节)
    */
    
    /* 方法2: 永久设置(MySQL配置文件) 
     my.cnf 或 my.ini
     */
    [mysqld]
    query_cache_type = DEMAND
    query_cache_size = 10M
    
    

    4. 查看查询缓存命中及运行情况

    mysql>SELECT count(*) FROM sta_log;
    + ------------- +
    | count(*)      |
    + ------------- +
    | 13471944      |
    + ------------- +
    Query OK, 1 rows affected (6.896 sec)
    
    ...
    ...
    ...
    
    mysql>SELECT count(*) FROM sta_log;
    + ------------- +
    | count(*)      |
    + ------------- +
    | 13471944      |
    + ------------- +
    Query OK, 1 rows affected (0.00 sec)
    /* 命中缓存时,会发现查询速度明显加快 */
    
    mysql>SHOW STATUS LIKE 'Qcache%';
    + ------------------ + ---------- +
    | Variable_name      | Value      |
    + ------------------ + ---------- +
    | Qcache_free_blocks | 1          |
    | Qcache_free_memory | 20954056   |
    | Qcache_hits        | 12         |
    | Qcache_inserts     | 1          |
    | Qcache_lowmem_prunes | 0          |
    | Qcache_not_cached  | 14         |
    | Qcache_queries_in_cache | 0          |
    | Qcache_total_blocks | 1          |
    + ------------------ + ---------- +
    8 rows
    /*
    Qcache_hits:查询缓存累计命中次数
    */
    

    相关文章

      网友评论

        本文标题:MySQL查询缓存命令大全

        本文链接:https://www.haomeiwen.com/subject/cmiydxtx.html