mysql查询缓存
1.具体使用
什么是查询缓存?
mysql服务器提供的,用于缓存select语句结果的一种内部内存缓存系统。
如果开启了查询缓存,将所有的查询结果,都缓存起来,使用同样的select语句,再次查询时,直接返回缓存的结果即可
查看缓存设置情况,并给缓存空间设置大小:
mysql>show variables like 'query_cache%'; //查询缓存情况
- 在Mysql目录下找到my.ini进行设置查询缓存
设置缓存容量大小, 并打开查询缓存.
目前不设置, 缓存也是打开的
设置完毕保存,并重启mysql.
再进行查看的话, 可以发现缓存容量变化了.
现在来进行实践下:
可以发现在查询同一个语句的时候, 第一次明显比第二次慢.
因为第一次是从数据库读取的, 而第二次是直接从缓存内读取的.
这次我们先对此语句做一次修改,然后再做一次查询.
可以发现在做修改后, 查询同一条数据, 第一次又变慢了.
因为在数据表数据有发生变化, 或者数据结构有发生变化,则会清空全部的缓存数据, 缓存就会失效了.
2.查询缓存空间使用情况
mysql>show status like 'Qcache%';
3.不使用缓存
当查询语句使用了不规则的表达式.
例如时间、随机数等;
(1)时间日期now()
mysql>select count(*),now() from emp where empno=4099993;
(2)随机数 rand()
order by rand() //rand()随机生成0,1的数, 每次查询出来排序都是随机的.
mysql>select * from emp where empno=4099993 order by rand() limit 5;
4.生成多个缓存
mysql缓存对大小写、空格都比较敏感, 相同的语句大小写不同, 空格量不同, mysql缓存都会把它当成一个新的sql语句再次对其缓存.
例如大小写不同, 他会对另外一条进行缓存处理.
mysql> select * from emp where empno=4099996;
mysql> select * from emp WHERE empno=4099996;
5.禁用缓存
在查询语句中加入
sql_no_cache 该语句就不会使用缓存了.
mysql> select sql_no_cache * from emp WHERE empno=4099996;