日期:2014-05-16  浏览次数:20666 次

MySQL加速查询速度的独门武器:查询缓存

导读

??? 与朋友或同事谈到mysql查询缓存功能的时候,个人喜欢把Query Cache比作荔枝,是非常营养的东西,但是一次性吃太多了,就容易导致上火而流鼻血,虽然不是特别恰当的比喻,但是有很多相似的地方,另外Query Cache有其特殊的业务场景,也不像其他数据库产品,缓存查询语句的执行计划等信息,而是直接缓存查询语句的记录集和对应的SQL语句。本文就给大家介绍下查询缓存的相关知识,希望可以引导大家正确地使用Query Cache这个独门武器。

对mysql查询缓存从五个角度进行详细的分析:Query Cache的工作原理、如何配置、如何维护、如何判断查询缓存的性能、适合的业务场景分析。

?

n??工作原理

查询缓存的工作原理,基本上可以用二句话概括:

l? 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句;

l? 新的SELECT语句或预处理查询语句,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写;

查询缓存对什么样的查询语句,无法缓存其记录集,大致有以下几类:

l? 查询语句中加了SQL_NO_CACHE参数;

l? 查询语句中含有获得值的函数,包涵自定义函数,如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;

l? 对系统数据库的查询:mysql、information_schema

l? 查询语句中使用SESSION级别变量或存储过程中的局部变量;

l? 查询语句中使用了LOCK? IN SHARE MODE、FOR UPDATE的语句

l? 查询语句中类似SELECT …INTO 导出数据的语句;

l? 事务隔离级别为:Serializable情况下,所有查询语句都不能缓存;

l? 对临时表的查询操作;

l? 存在警告信息的查询语句;

l? 不涉及任何表或视图的查询语句;

l? 某用户只有列级别权限的查询语句;

查询缓存的优缺点:

l? 不需要对SQL语句做任何解析和执行,当然语法解析必须通过在先,直接从Query? Cache中获得查询结果;

l? 查询缓存的判断规则,不够智能,也即提高了