ssd mysql query cache_MySQL 缓存 Query Cache使用 分析

QueryCache(上面

简称QC)是根据SQL语句来cache的。一个SQL查询假如

以select扫尾

,那么mysql服务器将尝试对其使 用QC。每个Cache都是以SQL文本作为key来存的。在使用

QC之前,SQL文本不会被作任何处理。也就是说,两个SQL语句,只需

相差哪怕是一个 字符(比方

大小写不一样;多一个空格等),那么这两个SQL将运用

不一样

的一个CACHE。

不过SQL文本有能够

会被客户端做一些处理。比方

在官方的命令行客户端里,在发送SQL给服务器之前,会做如下处理:

过滤一切

注释

去掉SQL文本前後的空格,TAB等字符。留心

,是文本后面

和後面的。中间

的不会被去掉。

上面

的三条SQL里,因 为SELECT大小写的联络

,最後一条和其他两条在QC里一定

是用的不一样的存储位置

。而第一条和第二条,区别在于後者有个注释

,在不一样

客户端,会有不一 样的结果。所以,保险起见,请尽量不要运用

动态的注释

。在PHP的mysql扩展里,SQL的注释

是不会被去掉的。也就是三条SQL会被存储在三个不一样

的 缓存里,虽然它们的结果都是一样的。

select * FROM people where name='surfchen';

select * FROM people where /*hey~*/name='surfchen';

SELECT * FROM people where name='surfchen';

当前

只要

select语句会被cache,其他相似

show,use的语句则不会被cache。

由于

QC是如此前端,如此基本

的一个缓存零碎

,所以假如

一个表被更新,那么和这个表有关

的SQL的一切

QC都会被失效

。假设一个结合

查询里触及

到了表A和表B,假如

表A或者表B的其中一个被更新(update或者delete),这个查询的QC将会失效

也就是说,假如

一个表被频繁更新,那么就要思虑

清楚究竟能无法

应该对有关

的一些SQL实行

QC了。一个被频繁更新的表假如

被使用

了QC,能够

会加重数 据库的负担,而不是减轻负担。我通常

的做法是默许

打开QC,而对一些触及

频繁更新的表的SQL语句加上SQL_NO_CACHE重要

词来对其禁用 CACHE。这样可以

尽能够

防止

不必要的内存操作,尽能够

保持内存的延续

性。

那些查询很分散的SQL语句,也不应该运用

QC。比方

用来查询用户和密码的语句——“select pass from user where name='surfchen'”。这样的语句,在一个零碎

里,很有能够

只在一个用户登陆的时辰

被运用

。每个用户的登陆所用到的查询,都是不一样的SQL 文本,QC在这里就几乎不起作用了,由于

缓存的数据几乎是不会被用到的,它们只会在内存里占地点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值