http://www.cnblogs.com/iixiaowei/articles/2341716.html
MySQL查询缓存设置 提高MySQL查询性能
从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询。这样就大大提高了性能,节省时间,非常有用。
打开查询缓存,是通过几个步骤来设置的,例如:虽然你设置Mysql允许查询缓存,但是如果你设置的查询缓存大小为了0,这和没有允许没什么区别。所以必须是几个步骤的设置才能真正打开查询缓存这个功能。
下面我用 mysql6.0 最为演示最常用的设置查询缓存
第一: query_cache_type 使用查询缓存的方式
一般,我们会把 query_cache_type 设置为 ON,默认情况下应该是ON
- mysql> select @@query_cache_type;
+——————–+
| @@query_cache_type |
+——————–+
| ON |
+——————–+
这样 当我们执行 select id,name from tableName; 这样就会用到查询缓存。在 query_cache_type 打开的情况下,如果你不想使用缓存,需要指明select sql_no_cache id,name from tableName;当然也可以禁用查询缓存: mysql> set session uery_cache_type=off;
这里我们不讨论这个,我们演示常用的设置。
第二: 系统变量 have_query_cache 设置查询缓存是否可用
- mysql> show variables like 'have_query_cache';
+——————+——-+
| Variable_name | Value |
+——————+——-+
| have_query_cache | YES |
+——————+——-+
上面的显示,表示设置查询缓存是可用的。
第三: 系统变量 query_cache_size
表示查询缓存大小,也就是分配内存大小给查询缓存,如果你分配大小为0,
那么 第一步 和 第二步 起不到作用,还是没有任何效果。
- mysql> select @@global.query_cache_size;
+—————————+
| @@global.query_cache_size |
+—————————+
| 16777216 |
+—————————+
上面是 mysql6.0设置默认的,之前的版本好像默认是0的,那么就要自己设置下。
设置 set @@global.query_cache_size=1000000; 这里是设置1M左右,900多K。
再次查看下 select @@global.query_cache_size;
+—————————+
| @@global.query_cache_size |
+—————————+
| 999424 |
+—————————+
显示我们设置新的大小,表示设置成功。
第四: query_cache_limit 控制缓存查询结果的最大值
例如: 如果查询结果很大, 也缓存????这个明显是不可能的。
MySql 可以设置一个最大的缓存值,当你查询缓存数结果数据超过这个值就不会
进行缓存。缺省为1M,也就是超过了1M查询结果就不会缓存。
- mysql> select @@global.query_cache_limit;
+—————————-+
| @@global.query_cache_limit |
+—————————-+
| 1048576 |
+—————————-+
这个是默认的数值,如果需要修改,就像设置缓存大小一样设置,使用set重新指定大小。
好了,通过4个步骤就可以 打开了查询缓存,具体值的大小和查询的方式 这个因不同的情况来指定了。
有关MySQL查询缓存更详细的介绍请看:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#query-cache
转自:http://hi.baidu.com/aganle/blog/item/49e4703983110b2cb9998f7c.html
http://blog.sina.com.cn/s/blog_6e27a45f01015oyk.html
MYSQL SQL_NO_CACHE的真正含义
that the cache is not used to answer the query.
You may use RESET QUERY CACHE to remove all queries from the cache and
then your next query should be slow again. Same effect if you change
the table, because this makes all cached queries invalid.
mysql> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (7.22 sec)
mysql> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.45 sec)
mysql> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.45 sec)
mysql> select SQL_NO_CACHE count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.43 sec)