MySQL查询缓存命令大全


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查询缓存命令大全)