<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[浅谈MySQL查询缓存机制 ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 15 Dec 2010 12:53:31 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	缓存机制简单的说就是缓存sql文本及查询结果，如果运行相同的sql，服务器直接从缓存中取到结果，而不需要再去解析和执行sql。如果表更改了，那么使用这个表的所有缓冲查询将不再有效，查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变，包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等，也包括那些映射到改变了的表的使用MERGE表的查询。显然，这对于频繁更新的表，查询缓存是不适合的，而对于一些不常改变数据且有大量相同sql查询的表，查询缓存会节约很大的性能。<br/>查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外，同样的查询字符串由于其它原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不同 默认字符集的查询被认为是不同的查询并且分别进行缓存。<br/>下面sql查询缓存认为是不同的：<br/>SELECT * FROM tbl_name<br/>Select * from tbl_name<br/><br/><br/>查询缓存相关参数<br/>mysql&gt; SHOW VARIABLES LIKE &#039;%query_cache%&#039;;<br/>+------------------------------+---------+<br/>&#124; Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; Value&nbsp;&nbsp; &#124;<br/>+------------------------------+---------+<br/>&#124; have_query_cache&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; YES&nbsp;&nbsp;&nbsp;&nbsp; &#124; --查询缓存是否可用<br/>&#124; query_cache_limit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; 1048576 &#124; --可缓存具体查询结果的最大值<br/>&#124; query_cache_min_res_unit&nbsp;&nbsp;&nbsp;&nbsp; &#124; 4096&nbsp;&nbsp;&nbsp;&nbsp;&#124; <br/>&#124; query_cache_size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; 599040&nbsp;&nbsp;&#124; --查询缓存的大小<br/>&#124; query_cache_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; --阻止或是支持查询缓存<br/>&#124; query_cache_wlock_invalidate &#124; OFF&nbsp;&nbsp;&nbsp;&nbsp; &#124; <br/>+------------------------------+---------+<br/><br/>下面是一个简单的例子：<br/>[mysql@csdba1850 ~]$ mysql -u root -p<br/>Enter password: <br/>Welcome to the MySQL monitor.&nbsp;&nbsp;Commands end with ; or &#92;g.<br/>Your MySQL connection id is 3<br/>Server version: 5.0.45-community MySQL Community Edition (GPL)<br/><br/>Type &#039;help;&#039; or &#039;&#92;h&#039; for help. Type &#039;&#92;c&#039; to clear the buffer.<br/><br/>mysql&gt; set global query_cache_size = 600000; --设置缓存内存<br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql&gt; set session query_cache_type = ON; --开启查询缓存<br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql&gt; use test<br/>Reading table information for completion of table and column names<br/>You can turn off this feature to get a quicker startup with -A<br/><br/>Database changed<br/>mysql&gt; show tables;<br/>+----------------+<br/>&#124; Tables_in_test &#124;<br/>+----------------+<br/>&#124; animals&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; <br/>&#124; person&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; <br/>+----------------+<br/>5 rows in set (0.00 sec)<br/><br/>mysql&gt; select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>--Qcache_hits表示sql查询在缓存中命中的累计次数，是累加值。<br/>mysql&gt; SHOW STATUS LIKE &#039;Qcache_hits&#039;;<br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; Qcache_hits&nbsp;&nbsp; &#124; 0&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;--0次<br/>+---------------+-------+<br/>8 rows in set (0.00 sec)<br/><br/>mysql&gt;&nbsp;&nbsp;select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt;&nbsp;&nbsp;SHOW STATUS LIKE &#039;Qcache%&#039;;<br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; Qcache_hits&nbsp;&nbsp; &#124; 1&nbsp;&nbsp;&nbsp;&nbsp; &#124; --表示sql在缓存中直接得到结果，不需要再去解析<br/>+---------------+-------+<br/>8 rows in set (0.00 sec)<br/><br/>mysql&gt; select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; SHOW STATUS LIKE &#039;Qcache_hits&#039;;<br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; Qcache_hits&nbsp;&nbsp; &#124; 3&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;--上面的sql也是是从缓存中直接取到结果<br/>+---------------+-------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; insert into animals select 9,&#039;testsds&#039; ; --插入数据后，跟这个表所有相关的sql缓存就会被清空掉<br/>Query OK, 1 row affected (0.00 sec)<br/>Records: 1&nbsp;&nbsp;Duplicates: 0&nbsp;&nbsp;Warnings: 0<br/><br/>mysql&gt; select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; SHOW STATUS LIKE &#039;Qcache_hits&#039;;<br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; Qcache_hits&nbsp;&nbsp; &#124; 3&nbsp;&nbsp;&nbsp;&nbsp;&#124;&nbsp;&nbsp;--还是等于3，说明上一条sql是没有直接从缓存中直接得到的<br/>+---------------+-------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; select count(*) from animals;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>mysql&gt; SHOW STATUS LIKE &#039;Qcache_hits&#039;; <br/>+---------------+-------+<br/>&#124; Variable_name &#124; Value &#124;<br/>+---------------+-------+<br/>&#124; Qcache_hits&nbsp;&nbsp; &#124; 4&nbsp;&nbsp;&nbsp;&nbsp; &#124; <br/>+---------------+-------+<br/>1 row in set (0.00 sec)<br/><br/>我是从07年12月开始学习mysql的，断断续续看了一小部分。一直想写个mysql入门的系列，包括mysql的安装，配置再到优化，复制，集群等等，唉，懒哪，什么都没有整理出来，希望年后能有所进展。<br/>参考：<br/>http://dev.mysql.com/doc/refman/5.1/zh/<br/>--EOF--<br/>地址：http://rdc.taobao.com/blog/dba/html/61_mysql_select_cache.html <br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 浅谈MySQL查询缓存机制 ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>