查询缓存

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
6.9MySQL 查询缓存

从MySQL4.0.1开始,MySQLserver有一个重要的特征:QueryCache。当在使用中, 查询缓存会存储一个SELECT查询的文本与被传送到客户端的相应结果。如果之后接收到一个同样的查询,服务器将从 查询缓存中检索结果,而不是再次分析和执行这个同样的查询。

注意: 查询缓存绝不返回过期数据。当数据被修改后,在 查询缓存中的任何相关词条均被转储清除。

在某些表并不经常更改,而你又对它执行大量的相同查询时, 查询缓存将是非常有用的。对于许多WEB服务器使用大量的动态信息,这是一个很典型的情况。

下面是 查询缓存的一个性能数据。(这些结果的产生,是通过在一个aAlpha2x500MHz、2GBRAM和64MB 查询缓存上执行MySQL基准套件和到的):

*如果你执行的所有查询均是简单的(比如从表中一行一行的选取);但是仍然是不同的,所以该查询不能被缓冲, 查询缓存处于活动时,开销为13%。这可以被看作是最差的情况。然而,在实际情况下,查询是比我们的简单示例要复杂得多的,所以开销通常显著得低。
*在只有一行记录表中搜索一行后,搜索将快238%。这可以被认为是接近于对一个被缓冲的查询所期望的最小的加速。
*如果你希望禁用 查询缓存,设置query_cache_size=0。禁用了 查询缓存,将没有明显的开销。(在配置选项--without-query-cache的帮助下, 查询缓存可以被排除在外码之外)

6.9.1 查询缓存如何运作

查询在分析之前先被比较,因而

SELECT*FROMtbl_name



Select*fromtbl_name

对于 查询缓存被当作是不同的查询,因而查询需要严格的一致(字节对字节的),才会被认为是同样的。另外,如果一个客户端使用一个新的连接格式或不同于其它客户端的另一个字符集,一个查询将被视为不同的。

使用不同的,使用不同协议版本的,或使用不同的缺省字符串的查询将被认为是不同的查询,并将分别的缓冲。

高速缓冲不对SELECTCALC_ROWS...和SELECTFOUND_ROWS()...类型的查询起作用,因为找到的行的数目也是被存储在缓冲里的。

如果查询结果被从 查询缓存中返回,那么状态变量Com_select将不会被增加,但是Qcache_hits却会增加。查看章节6.9.4 查询缓存的状态和维护。

如果一个表发生的改变(INSERT,UPDATE,DELETE,TRUNCATE,ALTER或DROPTABLE|DATABASE),那么所有这张表使用的缓冲的查询(可能通过一个MRG_MyISAM表!)将被得失效,并从缓冲中移除。

InnoDB表的事务所做的更改将在一个COMMIT被完成时,使数据失效。

如果一个查询包括下面的函数,它将不能被缓冲: 1

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值