查询缓存配置
1.查看当前的MySQL数据库是否支持查询缓存:
SHOW VARIABLES LIKE 'have_query_cache' ;
2.查看当前MySQL是否开启了查询缓存:
SHOW VARIABLES LIKE 'query_cache_type' ;
3.查看查询缓存的占用大小:
SHOW VARIABLES LIKE 'query_cache_size' ;
4.查看查询缓存的状态变星:
SHOW STATUS LIKE 'Qcache%' ;
Qcache_ free_ blocks
查询缓存中的可用内存块数
Qcache_ free. memory
查询缓存的可用内存量
Qcache_ hits
查询缓存命中数
Qcache_ jinserts
添加到查询缓存的查询数
Qcache_ Jowmen. prunes
由于内存不足而从查询缓存中删除的查询数
Qcache not. cached
非缓存查询的数量(由于query. cache. type设置而无法缓存或未缓存)
Qcache_ queries_ jin. cache
查询缓存中注册的查询数
Qcache_ total blocks
查询缓存中的块总数
开启查询缓存
MySQL的查询缓存默认是关闭的,需要手动配置参数query_cache_type , 来开启查询缓存。query_cache_type该参数的可取值有三个值
OFF或0 查询缓存功能关闭
ON或1查询缓存功能打开, SELECT的结果符合缓存条件即会缓存,否则,不予缓存,显式指定SQL_NO_ CACHE ,不予缓存
DEMAND或2查询缓存功能按需进行,显式指定SQL CACHE的SELECT语句才会缓存;其它均不予缓存
在/usr/my.cnf配置中,增加以下配置:
query_cache_type=1
查询缓存SELECT选项
可以在SELECT语询中指定两个与查询缓存相关的选项:
SQL CACHE :如果查询结果是可缓存的,并且query. .cache_ type系统变量的值为ON或DEMAND , 则缓存查询结果。
SQL NO_ CACHE :服务器不使用查询缓存。它既不检查查询缓存,也不检查结果是否已缓存,也不缓存查询结果。
例子:
SELECT SQL_CACHE id, name FROM customer ;
SELECT SQL_NO_CACHE id, name FROM customer;
查询缓存失效的情况
- SQL句不一致的情况,要想命中查询缓存,查询的SQL语句必须-致。
select count(*) from tb_item;
Select count(*) from tb_item;
2)当查询语句中有一些不确定的时 ,则不会缓存。如: now), current. date() , curdate(), curtime(), rand() , uuid() , user() , database()。
select * from tb_ item where updatetime < now() limit 1;
select user();
select database();
3)不使用任何表查询语句。
select 'A';
4)查询mysql,information_schema或performance_schema数据库中的表时,不会走查询缓存。
select*from information_schema_engines ;
5)在存储的函数,触发器或事件的主体内执行的查询。
6)如果表更改,则使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。这包括使用MERGE映射到已更改表的表的查询。一个表可以被许多类型的语句,如被改变INSERT,UPDATE,DELETE ,TRUNCATE TABLE,ALTER TABLE,DROP TABLE ,或DROP DATABASE