mysql查询是否会缓存_MySQL 数据库执行查询语句时是否会缓存此语句 | IT工程师的生活足迹...

简单说:就是 MySQL 数据库会缓存已经执行过的SQL语句和语句执行结果;如果下次提交同一个SQL语句,就直接反复缓存的执行结果。减少了SQL语句的执行时间。

一、关于查询缓存的问题

不过这个看似简单的实现,牵扯到很多内容

1、哪些SQL语句会被缓存

2、多个会话之间的缓存是否共享?

3、缓存在什么时候会失效?

4、查询缓存命中时,那个阶段检查,会话是否有权限访问查询的数据。

5、如果查询结果的数据量很大,是否还应该缓存。

6、缓存的查询结果,导致内存碎片增多。

……

二、查询缓存问题解答

2.1、查询被缓存的条件

1、查询语句必须完全相同才能被视为相同。查询语句在查询缓存匹配过程使用哈希的方式。

2、使用不同数据库,不同协议版本或不同默认字符集的查询被视为不同的查询,并分别进行缓存。

2.2、查询缓存不缓存哪些语句

1、查询是外部查询的子查询

2、在存储的函数,触发器或事件的主体内执行的查询

3、涉及到用户定义的函数(UDF)或存储函数。

4、涉及到用户变量或本地存储的程序变量。

5、涉及到表mysql, INFORMATION_SCHEMA或 performance_schema数据库。

6、涉及到TEMPORARY表

7、不使用任何表格。

8、用户具有任何涉及表的列级特权。

9、……

2.3、查询缓存的会话共享

查询缓存由会话共享,因此可以发送由一个客户端生成的结果集,以响应另一个客户端发出的相同查询。

2.4、查询缓存中关于用户权限

如果查询语句被缓存命中;在返回查询结构之前,MYSQL会检查用户是否有相应数据库和表的权限。

如果没有相应权限,则不使用缓存的结果返回。

2.5、查询缓存的失效

1、查询缓存不会返回陈旧的数据。当表被修改时,查询缓存中的任何相关条目都被刷新。

2、当缓存的内存不够,而删除部分查询缓存结果。

3、缓存不应该设置在频繁更改的表上。

2.6、对SQL语句设置是否缓存

SQL查询语句执行时,可以指定使用查询缓存或禁用查询缓存。

1、SQL_CACHE:

如果查询结果是可缓存的,并且query_cache_type系统变量的值为ON或KONG,则查询结果将被缓存 DEMAND。

2、SQL_NO_CACHE:

服务器不使用查询缓存。它既不检查查询缓存,查看结果是否已被缓存,也不缓存查询结果。

SELECT SQL_CACHE id, name FROM customer;

SELECT SQL_NO_CACHE id, name FROM customer;

更多关于查询缓存的内容,请见:

https://dev.mysql.com/doc/refman/5.7/en/query-cache.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值