众所周知,从内存中读取要比从硬盘上速度要快好几百倍。故而,现在绝大部分应用系统都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率。
首先打开mysql 命令端:
输入 show variables like '%query_cache%';
其中:
have_query_cache
表明当前版本支持缓存功能,你会发现是它的值是YES。不要以为是yes就代表开启了查询缓存,实际上不是的。该参数表示当前版本的mysql是否支持query cache,实际上是否开启查询缓存是看另外下面两个参数的值。
query_cache_size
,
该值默认单位为byte,即字节。该值默认为0,表明不开启。改了后表明开启。为缓存的大小。具体设置为多大,取决于实际情况,但是最好设置为1024的倍数,参考值32M。
query_cache_type
query_cache_type=0(OFF)禁用cache
query_cache_type=1(ON)缓存所有结果,除非select语句使用SQL_NO_CACHE禁用查询缓存
query_cache_type=2(DEMAND),只缓存select语句中通过SQL_CACHE指定需要缓存的查询
数据库从服务器上读取数据时,可以从硬盘的数据文件中获取数据,也可以从数据缓存中读取数据。那在什么情况下,系统是从缓存中读取数据,而不是从硬盘的数据文件中读取数据?
简单的说,数据缓存就是内存中的一块存储区域,它存储了用户的sql文件以及相关查询。通常情况下,用户下次查询时,如果使用的sql文本是相同的,并且自从上次查询后,相关的记录没有被更新过,此时数据库就直接采用缓存中的内容。从这个原则,可以看到如果要直接使用缓存中的数据,至少要满足以下几个条件。
当前后两次用户使用了相同的sql语句(假设不考虑其他条件,控制变量法),则服务器会从缓存中读取,而不需要再去解析和执行sql语句。这里的sql文本必须一字不差的完全相同。select后面的字段名称(大小写不敏感)和数量都要求一致。where条件也是一致的。
如果记录所在的表更改了,比如增删字段。或者是insert都是不行。
这里强调是一致,不是兼容!
从上面的条件可以卡出,想要使用缓存,条件相对比较严格。其实也是合情合理的,主要是为了保障数据的一致性。