MySQL的查询缓存是MySQL内置的一种缓存机制,能够针对sql进行缓存。好比咱们发送select * from mysql.user这么一个查询,MySQL首先检索内存中是否有数据而且数据是否过时,若是没有数据或者数据已通过期就去数据库中查找,若是有数据而且没有过时就直接返回数据。对于sql的匹配规则很是简单,就是字符串的比较,只要字符串相同,那么就认为是同一个查询。这里的字符串相同并非表示sql语义相同,而是查询的sql字符串相同,空格也不行。mysql
查询缓存的开启在my.cnf配置文件中,修改查询缓存相关参数就能够完成。(RDS在管理后台进行配置)sql
参数解释数据库
query_caceh_type | 是否开启查询缓存缓存 0 表示不开启查询缓存 |
query_cache_size | 给缓存分配的最大内存空间 |
query_cache_limit | 指定单个查询可以使用的缓存大小 |
query_cache_wlock_invalidate | 针对myisam存储引擎(因此采用非myisam引擎的就不须要考虑了),设置当有write lock在某个table上面的时候,读请求是要等待write lock释放资源以后再查询仍是容许直接从query cache中读取结果,默认是OFF,能够直接从query cache中取得结果。spa |
咱们可使用 show global status like 'Qcache%'; 来查看查询缓存的使用状态。对象
参数解释排序
Qcache_free_blocks | 目前还处于空闲状态的 Query Cache 中内存 Block 数目 |
Qcache_free_memory | 目前还处于空闲状态的 Query Cache 内存总量 |
Qcache_hits | 命中次数 |
Qcache_inserts | 向 Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数 |
Qcache_lowmem_prunes | 当 Query Cache 内存容量不够,须要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数 |
Qcache_not_cached | 没有被 Cache 的 SQL 数,包括没法被 Cache 的 SQL 以及因为 query_cache_type 设置的不会被 Cache 的 SQL |
Qcache_queries_in_cache | 目前在 Query Cache 中的 SQL 数量 |
Qcache_total_blocks | Query Cache 中总的 Block 数量 |
配置文件的query_caceh_type参数有三个选项。内存
其中0 表示不开启查询缓存,也就是说任何SQL都没法使用查询缓存。ci
1 表示始终开启查询缓存,也就是说全部的SQL都会被缓存。当咱们认为某一项业务的SQL会频繁变化(例如利用用户坐标排序),那么咱们可使用sql_no_cache指定此SQL不进入缓存,从而减小性能开销。例如:select sql_no_cache * from user;
2 表示按需开启查询缓存,也就是说全部的SQL在不指定状况下都不会被缓存。只有使用sql_cache的SQL才会被缓存。例如:select sql_cache * from user;